在不將檔案內容讀入記憶體的情況下,如何從檔案中讀取“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 方法,但它需要一個現有的緩沖區才能作業,而我希望從檔案中讀取任意數量的位元組而不需要將整個內容讀入記憶體。
實作這一目標的最佳方法是什么?
感謝您的時間。
uj5u.com熱心網友回復:
使用這個功能:
// 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 */
uj5u.com熱心網友回復:
你可以這樣做:
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]))
更多閱讀請查看網站。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/524289.html
標籤:去字节
