我有一个Go程序,它将字符串写入文件。我有一个循环,它是 20000倍的迭代,并且在每次迭代中我都会在文件中写入约20-30个字符串。我只是想知道哪种是将其写入文件的最佳方法。
为每个字符串写它。使其进行20000 * 30个写操作。
最后写它。在这种情况下,文件指针也应该是
从代码开头或代码结尾打开。做
有关系吗
我假设方法2应该更好。有人可以有理由确认这一点。 一次写作要比定期写作更好。因为文件指针始终会打开。
我正在使用
f.WriteString(<string>)
,并且buffer.WriteString(<some string>)
缓冲区的类型为bytes.Buffer
,而f
是打开的文件指针。 最佳答案
bufio软件包正是针对此类任务而创建的。代替对每个Write调用进行syscall,bufio.Writer
会在进行syscall之前在内部存储器中缓冲多达固定数量的字节。进行系统调用后,内部缓冲区将重新用于下一部分数据
比较第二种方法bufio.Writer
N/S
代替1
)S
字节而不是N
字节)其中
S
-是缓冲区大小(可以通过bufio.NewWriterSize
指定),N
-需要写入的数据总大小。用法示例(https://play.golang.org/p/AvBE1d6wpT):
f, err := os.Create("file.txt")
if err != nil {
log.Fatal(err)
}
defer f.Close()
w := bufio.NewWriter(f)
fmt.Fprint(w, "Hello, ")
fmt.Fprint(w, "world!")
err = w.Flush() // Don't forget to flush!
if err != nil {
log.Fatal(err)
}