【发布时间】:2017-11-09 03:27:29
【问题描述】:
我有一个问题,我需要使用 bufio.read 逐行读取 tsv 文件,并且我需要记录每行读取的字节数。
问题是,似乎我不能只初始化一个空切片并将其传递给 bufio.read 并期望切片包含文件的整行。
file, _ := os.Open("file.tsv")
reader := bufio.NewReader(file)
b := make([]byte, 10)
for {
bytesRead, err:= reader.Read(b)
fmt.Println(bytesRead, b)
if err != nil {
break
}
}
所以,对于这个例子,由于我指定切片为 10 个字节,所以即使行大于 10 个字节,阅读器也最多读取 10 个字节。
但是:
file, _ := os.Open("file.tsv")
reader := bufio.NewReader(file)
b := byte{} //or var b []byte
for {
bytesRead, err:= reader.Read(b)
fmt.Println(bytesRead, b)
if err != nil {
break
}
}
这将始终读取 0 字节,我假设它是因为缓冲区的长度为 0 或容量为 0。
如何逐行读取文件,将整行保存在变量或缓冲区中,并准确返回我已读取的字节数?
谢谢!
【问题讨论】: