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

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

如何直接從 Go 中的文件讀取任意數量的數據?

如何直接從 Go 中的文件讀取任意數量的數據?

Go
米脂 2023-03-07 15:29:59
在不將文件內容讀入內存的情況下,如何從文件中讀取“x”字節,以便為每個單獨的讀取操作指定 x 是什么?我看到Read各種Readers 的方法采用一定長度的字節片,我可以從文件中讀取到該片中。但在那種情況下,切片的大小是固定的,而理想情況下我想做的是:func main() {    f, err := os.Open("./file.txt")    if err != nil {        panic(err)    }    someBytes := f.Read(2)    someMoreBytes := f.Read(4)}bytes.Buffer有一個Next 方法非常接近我想要的,但它需要一個現有的緩沖區才能工作,而我希望從文件中讀取任意數量的字節而不需要將整個內容讀入內存。完成此任務的最佳方法是什么?
查看完整描述

2 回答

?
HUWWW

TA貢獻1874條經驗 獲得超12個贊

使用此功能:


// readN reads and returns n bytes from the reader.

// On error, readN returns the partial bytes read and

// a non-nil error.

func readN(r io.Reader, n int) ([]byte, error) {

    // Allocate buffer for result

    b := make([]byte, n)

    // ReadFull ensures buffer is filled or error is returned.

    n, err := io.ReadFull(r, b) 

    return b[:n], err

}

像這樣調用:


someBytes, err := readN(f, 2)

if err != nil  { /* handle error here */

someMoreBytes := readN(f, 4)

if err != nil  { /* handle error here */


查看完整回答
反對 回復 2023-03-07
?
jeck貓

TA貢獻1909條經驗 獲得超7個贊

你可以這樣做:


f, err := os.Open("/tmp/dat")

check(err)

b1 := make([]byte, 5)

n1, err := f.Read(b1)

check(err)

fmt.Printf("%d bytes: %s\n", n1, string(b1[:n1]))

如需更多閱讀,請查看網站。



查看完整回答
反對 回復 2023-03-07
  • 2 回答
  • 0 關注
  • 139 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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