当我实际上应该在ioutil上使用bufio软件包时,我感到困惑。例如在写入文件或读取文件时。我遇到的情况是,有多个功能和API会逐步处理同一数据。我不确定在这种情况下选择bufio是否优于ioutil会有所帮助?请提出建议。

最佳答案

bufio软件包的意图是它声明的内容(https://golang.org/pkg/bufio/)-实现缓冲的I/O。因此,对于写操作,如果不刷新,数据将保留在缓冲区中,如this示例所示。 Bufio的Write还需要一个实现Writer接口(interface)的对象。

而ioutil没有缓冲等。-您无需打开即可直接写入命名文件,例如:

myData := []byte("Testing\ngo\n")
err := ioutil.WriteFile("/tmp/data1", myData, 0644)

因此,作为一个用例,如果您已经准备好所有数据并且需要一次写入一个文件,那么ioutil是一个方便的选择。

但是,如果随着代码的进行而生成数据,那么bufio是一个更合适的选择,您可以根据需要使用WriteString多次,然后最终调用flush。

类似地,对于ioutil而言,读取方法一次读取全部数据,这可能不适合非常大的文件,但在某些其他情况下可能是理想/可以接受的。 bufio为您提供了一些方法,您可以在这些方法中对要读取的数据有更多的控制权,而bufio提供了有用的方法来逐行读取,按其他标记拆分等。

这是操场上的program,说明了使用这两个软件包的写操作。

关于go - bufio包中的golang Writer.Write()与ioutil包中的WriteFile(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46841089/

10-11 00:59