60 lines
1.1 KiB
Go
60 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
)
|
|
|
|
// 大文件缓冲读写:逐行处理,内存占用恒定
|
|
func bigFileRW() {
|
|
// 打开源文件
|
|
srcFile, err := os.Open("file/large_file.txt")
|
|
if err != nil {
|
|
fmt.Printf("打开源文件失败: %v\n", err)
|
|
return
|
|
}
|
|
defer srcFile.Close()
|
|
|
|
// 创建目标文件
|
|
dstFile, err := os.Create("file/copy_large_file.txt")
|
|
if err != nil {
|
|
fmt.Printf("创建目标文件失败: %v\n", err)
|
|
return
|
|
}
|
|
defer dstFile.Close()
|
|
|
|
// 创建缓冲读写器
|
|
reader := bufio.NewReader(srcFile)
|
|
writer := bufio.NewWriter(dstFile)
|
|
defer func() {
|
|
// 刷新缓冲区并检查错误
|
|
if err := writer.Flush(); err != nil {
|
|
fmt.Printf("缓冲区刷新失败: %v\n", err)
|
|
}
|
|
}()
|
|
|
|
// 逐行读取写入
|
|
for {
|
|
line, err := reader.ReadString('\n')
|
|
if err == io.EOF {
|
|
break
|
|
}
|
|
if err != nil {
|
|
fmt.Printf("读取失败: %v\n", err)
|
|
return
|
|
}
|
|
_, err = writer.WriteString(line)
|
|
if err != nil {
|
|
fmt.Printf("写入失败: %v\n", err)
|
|
return
|
|
}
|
|
}
|
|
fmt.Println("大文件拷贝完成")
|
|
}
|
|
|
|
func main() {
|
|
bigFileRW()
|
|
}
|