繁体   English   中英

Go 中是否存在按长度分隔的扫描仪 Function(或与换行无关)?

[英]Is There a Scanner Function in Go That Separates on Length (or is Newline Agnostic)?

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

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

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

我正在使用 Scanner 但它似乎无法判断该行是否以换行符结尾,并且如果我使用Scanner.Text()它会自动拆分(使得无法判断一行是否以换行符结尾,或者该行刚刚在文件末尾终止)。

我还研究过编写自定义拆分 function,但这不是矫枉过正吗? 我只需要分割一些固定长度(我假设默认缓冲区大小 - 4096),或者文件中剩下的任何内容,以较短者为准。

我也看过Scanner.Split(bufio.ScanBytes)但是通过分块读取是否可以加快速度?

无论如何,这看起来应该非常简单。

使用此循环以固定大小的块读取 stream:

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
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM