当我真的应该在ioutil上使用bufio包时,我感到很困惑。例如,在编写文件或读取文件时。我有这样的场景,其中有多个功能和API在同一个数据阶段逐级处理。我不确定在这种情况下选择bufio而不是ioutil有帮助吗?请建议。
答案 0 :(得分:0)
bufio包的目的是它所声明的(https://golang.org/pkg/bufio/) - 实现缓冲的I / O.因此,对于写入,如果您不进行刷新,数据将保留在缓冲区中,如this示例中所示。 Bufio的Write还需要一个实现Writer接口的对象。
而ioutil没有缓冲等等 - 你直接写入指定的文件,而不必打开它,如:
myData := []byte("Testing\ngo\n")
err := ioutil.WriteFile("/tmp/data1", myData, 0644)
作为一个用例,如果你准备好所有数据并且需要写入文件 - 只需一次,那么ioutil是一个方便的选择。
但是如果你的代码进展时生成了数据,那么bufio是一个更合适的选项,你可以根据需要多次使用WriteString,然后最后调用flush。
对于读取类似,对于ioutil,Read方法一次性读取整个数据,这可能不适用于非常大的文件,但在某些其他情况下可能是理想/可接受的。虽然bufio为您提供了一些方法,您可以更好地控制要读取的数据量,但它提供了有用的方法,可以逐行读取,按其他标记分割等。
这里是操场上的program,用于说明使用这两个包进行写入。
答案 1 :(得分:0)
如果您准备好了所有数据,那么WriteFile更易于使用(高级API)。 io.Writer更通用。它是接口,允许你举例
如果您不需要这样的东西,WriteFile更容易阅读。如果你需要更复杂的东西,你必须使用io.Writer。但代码要长得多 - 你必须打开一个文件(+检查错误)并关闭它。