当我实际上应该在 ioutil 上使用 bufio 包时,我很困惑。例如在写入文件或读取文件时。我有一个场景,其中有多个函数和 API 分阶段处理同一数据。我不确定在这种情况下选择 bufio 而不是 ioutil 有帮助吗?请建议。
bufio 包的意图是它所说的(https://golang.org/pkg/bufio/) - 实现缓冲 I/O。因此,对于写入,如果您不刷新,数据将保留在缓冲区中,如本例所示。Bufio 的 Write 还需要一个实现 Writer 接口的对象。
而 ioutil 没有缓冲等 - 您直接写入命名文件,而无需打开它,例如:
myData := []byte("Testing\ngo\n")
err := ioutil.WriteFile("/tmp/data1", myData, 0644)
Run Code Online (Sandbox Code Playgroud)
因此,作为一个用例,如果您准备好所有数据并需要写入文件 - 只需一次,那么 ioutil 是一个方便的选择。
但是,如果您的数据随着代码的进展而生成,那么 bufio 是更合适的选项,您可以根据需要多次使用 WriteString,然后最终调用flush。
与读取类似,对于 ioutil,Read 方法一次读取整个数据,这可能不适合非常大的文件,但在其他一些情况下可能是可取的/可接受的。虽然 bufio 为您提供了可以更好地控制要读取的数据量的方法,但它提供了有用的方法来逐行读取、按其他标记拆分等。
这是操场上的一个程序,它说明了使用这两个包的写入。