为了账号安全,请及时绑定邮箱和手机立即绑定

Go 中是否有按长度分隔的扫描仪函数(或者换行不可知论)?

Go 中是否有按长度分隔的扫描仪函数(或者换行不可知论)?

Go
翻过高山走不出你 2023-02-14 17:37:14
我在 go 中有两种类型的文件,可以用以下字符串表示:const nonewline := 'hello' # content but no newline const newline := `hello\nworld' # content with newline我的目标只是读取两个文件中的所有内容(它通过流进入,所以我不能使用像 ReadAll 这样的内置内容,我正在使用stdioPipe)并在它们出现的地方包含换行符。我正在使用 Scanner 但它似乎没有办法判断该行是否以换行符结尾,如果我使用Scanner.Text()它会自动拆分(因此无法判断一行是否以换行符结尾,或者该行刚刚终止于文件末尾)。我也研究过编写自定义 Split 函数,但这不是太过分了吗?我只需要拆分一些固定长度(我假设默认缓冲区大小 - 4096),或者文件中剩余的任何内容,以较短者为准。我也在看,Scanner.Split(bufio.ScanBytes)但是通过分块读取可以加快速度吗?无论如何,这似乎应该是非常简单的事情。
查看完整描述

1 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

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


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

    }

}


查看完整回答
反对 回复 2023-02-14
  • 1 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号