File 从字节偏移量开始读取文件的一行,直到新行

File 从字节偏移量开始读取文件的一行,直到新行,file,go,byte,reader,File,Go,Byte,Reader,我正在使用os.ReadAt()读取csv/tsv文件中的某些行。但是,我不知道该行中有多少字节,我只需要从指定的字节偏移量开始读取行,直到换行 buffer = make([]byte, 46) os.ReadAt(buffer, 64) //Read at byte offset 64 and put contents in buffer 但是,这只允许我在中读取46字节的行。 有没有办法在换行前通读整行文字 谢谢 更新: 我只是创建一个保存偏移量和线长度的结构。。一开始就应该这么做。。我

我正在使用os.ReadAt()读取csv/tsv文件中的某些行。但是,我不知道该行中有多少字节,我只需要从指定的字节偏移量开始读取行,直到换行

buffer = make([]byte, 46)
os.ReadAt(buffer, 64) //Read at byte offset 64 and put contents in buffer
但是,这只允许我在中读取46字节的行。 有没有办法在换行前通读整行文字

谢谢

更新:


我只是创建一个保存偏移量和线长度的结构。。一开始就应该这么做。。我的坏方法之一是使用
bufio
pkg。这方面的一个例子如下:

fd, err := os.Open("your_file.csv")
if err != nil { //error handler
    log.Println(err)
    return
}

reader := bufio.NewReader(fd) // creates a new reader

_, err = reader.Discard(64) // discard the following 64 bytes
if err != nil { // error handler
    log.Println(err)
    return
}

// use isPrefix if is needed, this example doesn't use it
// read line until a new line is found
line, _, err := reader.ReadLine() 
if err != nil { // error handler
    log.Println(err)
    return
}
fmt.Println(string(line))
另一种读取行的方法是,可以使用
fd.Seek(64,0)
跳转到特定的字节,如

_, err = fd.Seek(64, 0)  // Set the current position for the fd
if err != nil { // error handler
    log.Println(err)
    return
}
然后用读卡器读这句话

reader := bufio.NewReader(fd)

line, _, err := reader.ReadLine()
if err != nil {
    log.Println(err)
    return
}
fmt.Println(string(line))

我必须在我当前读取的文件中后退一步,所以我不能丢弃接下来的n个字节。有时我不得不跳回文件的顶部。你能在discard中输入一个负数吗?不能,但如果需要,你可以使用
file.seek()
并创建另一个
bufio.Reader
。是的。。我正试图避免那样的事情。。但我想这是唯一的选择。谢谢