我有一个简单的代码,可以在两个实际文件之间进行复制。(它们在同一个磁盘上,但不确定是否相关。)func copy(inPath, outPath string) { inFile, err := os.Open(inPath) if err != nil { return fmt.Errorf("cannot open input file on path %q: %w", inPath, err) } defer inFile.Close() outFile, err := os.Create(outPath) if err != nil { return fmt.Errorf("cannot create output file on path %q: %w", outPath, err) } defer outFile() if _, err := io.Copy(inFile, outFile); err != nil { return fmt.Errorf("cannot copy file %q to %q: %w", inPath, outPath, err) }}我现在不确定,如果我应该或不应该使用bufio读者或作家或两者兼而有之。也就是说,如果我应该做类似的事情func copy(inPath, outPath string) { inFile, err := os.Open(inPath) if err != nil { return fmt.Errorf("cannot open input file on path %q: %w", inPath, err) } defer inFile.Close() outFile, err := os.Create(outPath) if err != nil { return fmt.Errorf("cannot create output file on path %q: %w", outPath, err) } defer outFile() if _, err := io.Copy(bufio.NewWriter(outFile), bufio.NewReader(inFile)); err != nil { return fmt.Errorf("cannot copy file %q to %q: %w", inPath, outPath, err) }}bufio 文档根本没有告诉我什么时候使用它,什么时候不使用它。
1 回答
互换的青春
TA贡献1797条经验 获得超6个赞
不要在这种情况下使用 bufio。当给定*os.File
目的地时,io.Copy 通过调用复制文件dest.ReadFrom(src)
。如果源也是*os.File
,则 ReadFrom 调用操作系统在某些系统上执行复制。
在 ReadFrom 和其他优化不可用的情况下,将 bufio 用于 io.Copy 源和目标仍然没有任何好处。io.Copy 缓冲区大小为 32k,bufio 默认缓冲区大小为 4K。因为 bufio 类型在传递一个更大的缓冲区时会绕过它们自己的缓冲区,所以 bufio 类型除了分配一些额外的内存外什么都不做。
- 1 回答
- 0 关注
- 86 浏览
添加回答
举报
0/150
提交
取消