Go中是否存在长度分离的扫描函数(或者Newline不可知论)



我在go中有两种类型的文件,可以用以下字符串表示:

const nonewline := 'hello' # content but no newline
const newline := `hellonworld' # content with newline

我的目标只是从这两个文件中读取所有内容(它是通过流来的,所以我不能使用ReadAll之类的内置内容,我使用的是stdioPipe(,并在它们出现的地方包含换行符。

我正在使用Scanner,但它似乎无法判断该行是否以换行符结束,如果我使用Scanner.Text(),它会自动拆分(因此无法判断一行是以换行符结尾,还是仅以文件结尾结尾(。

我也考虑过编写一个自定义的Split函数,但这不是过分了吗?我只需要拆分一些固定长度(我假设默认缓冲区大小为4096(,或者文件中剩下的任何内容,以较短的为准。

我也看过Scanner.Split(bufio.ScanBytes),但通过分块读取有没有加快速度?

无论如何,这似乎是一件非常简单的事情。

使用此循环读取固定大小块中的流:

chunk := make([]byte, size) // Size is the chunk size.
for {
n, err := io.ReadFull(stream, chunk)
if n > 0 {
// Do something with the chunk of data.
process(chunk[:n])
}
if err != nil {
break
}
}

相关内容

最新更新