在不将文件内容读入内存的情况下,如何从文件中读取“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 */
- 2 回答
- 0 关注
- 103 浏览
添加回答
举报
0/150
提交
取消