当我实际上应该在 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,Read 方法一次读取所有数据,这可能不适合非常大的文件,但在某些其他情况下可能是可取/可接受的。 bufio 为您提供了可以更好地控制要读取的数据量的方法,它还提供了有用的方法来逐行读取、按其他标记拆分等。
这是一个 program在 playground 上说明了使用这两个包进行写入。
关于bufio 包中的 golang Writer.Write() 与 ioutil 包中的 WriteFile(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46841089/