是否有一個版本ioutil.ReadAll會讀取直到到達 EOF 或讀取n字節(以先到者為準)?由于 DOS 原因,我不能只n從ioutil.ReadAll轉儲中獲取第一個字節。
3 回答

富國滬深
TA貢獻1790條經驗 獲得超9個贊
有幾種方法可以滿足您的要求。您可以使用任何一種。
func ReadFull(r Reader, buf []byte) (n int, err error)
ReadFull 將 len(buf) 字節從 r 準確讀取到 buf 中。如果讀取的字節數較少,則返回復制的字節數和錯誤。僅當未讀取字節時,錯誤才為 EOF。
func LimitReader(r Reader, n int64) Reader
LimitReader 返回一個從 r 讀取但在 n 個字節后以 EOF 停止的 Reader。底層實現是一個*LimitedReader。
func CopyN(dst Writer, src Reader, n int64) (written int64, err error)
CopyN 將 n 個字節(或直到出現錯誤)從 src 復制到 dst。它返回復制的字節數和復制時遇到的最早錯誤。返回時,寫 == n 當且僅當 err == nil。
func ReadAtLeast(r Reader, buf []byte, min int) (n int, err error)
ReadAtLeast 從 r 讀取到 buf 中,直到讀取至少 min 個字節。如果讀取的字節數較少,則返回復制的字節數和錯誤。僅當未讀取字節時,錯誤才為 EOF。

holdtom
TA貢獻1805條經驗 獲得超10個贊
有兩種選擇。Ifn
是您要讀取的字節數,r
是連接。
選項1:
p := make([]byte, n) _, err := io.ReadFull(r, p)
選項 2:
p, err := io.ReadAll(&io.LimitedReader{R: r, N: n})
如果應用程序通常填充緩沖區,則第一個選項更有效。
如果您正在讀取 HTTP 請求正文,請使用http.MaxBytesReader。

慕容708150
TA貢獻1831條經驗 獲得超4個贊
io.ReadFull 或 io.LimitedReader 或 http.MaxBytesReader。
如果你需要一些不同的東西,首先看看它們是如何實現的,用調整過的行為來推出你自己的東西是微不足道的。
- 3 回答
- 0 關注
- 586 瀏覽
添加回答
舉報
0/150
提交
取消