亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Golang 從 net.TCPConn 讀取字節

Golang 從 net.TCPConn 讀取字節

Go
MMTTMM 2021-09-27 10:35:32
是否有一個版本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。

功能復制N

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。


查看完整回答
反對 回復 2021-09-27
?
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。


查看完整回答
反對 回復 2021-09-27
?
慕容708150

TA貢獻1831條經驗 獲得超4個贊

io.ReadFull 或 io.LimitedReader 或 http.MaxBytesReader。

如果你需要一些不同的東西,首先看看它們是如何實現的,用調整過的行為來推出你自己的東西是微不足道的。


查看完整回答
反對 回復 2021-09-27
  • 3 回答
  • 0 關注
  • 586 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號