首次提交:初始化项目代码
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// 打开源文件
|
||||
srcFile, err := os.Open("io/source.txt")
|
||||
if err != nil {
|
||||
fmt.Printf("打开源文件失败: %v\n", err)
|
||||
return
|
||||
}
|
||||
defer srcFile.Close()
|
||||
|
||||
// 创建目标文件
|
||||
dstFile, err := os.Create("io/bufio_copy.txt")
|
||||
if err != nil {
|
||||
fmt.Printf("创建目标文件失败: %v\n", err)
|
||||
return
|
||||
}
|
||||
defer dstFile.Close()
|
||||
|
||||
// 初始化缓冲读写器(默认4096字节缓冲区)
|
||||
reader := bufio.NewReader(srcFile)
|
||||
writer := bufio.NewWriter(dstFile)
|
||||
// 函数退出前刷新缓冲区,确保数据落盘
|
||||
defer func() {
|
||||
if err := writer.Flush(); err != nil {
|
||||
fmt.Printf("缓冲区刷新失败: %v\n", err)
|
||||
}
|
||||
}()
|
||||
|
||||
// 流式拷贝:io.Copy底层自动适配缓冲
|
||||
written, err := io.Copy(writer, reader)
|
||||
if err != nil {
|
||||
fmt.Printf("文件拷贝失败: %v\n", err)
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Printf("缓冲拷贝完成,总数据量: %d 字节\n", written)
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
)
|
||||
|
||||
// PrefixReader 自定义Reader,读取固定前缀数据
|
||||
type PrefixReader struct {
|
||||
data []byte
|
||||
offset int // 读取偏移量
|
||||
}
|
||||
|
||||
// NewPrefixReader 创建自定义Reader实例
|
||||
func NewPrefixReader(s string) *PrefixReader {
|
||||
return &PrefixReader{
|
||||
data: []byte(s),
|
||||
}
|
||||
}
|
||||
|
||||
// Read 实现io.Reader接口
|
||||
func (r *PrefixReader) Read(p []byte) (int, error) {
|
||||
if r.offset >= len(r.data) {
|
||||
return 0, io.EOF
|
||||
}
|
||||
n := copy(p, r.data[r.offset:])
|
||||
r.offset += n
|
||||
return n, nil
|
||||
}
|
||||
|
||||
func main() {
|
||||
// 初始化自定义Reader
|
||||
reader := NewPrefixReader("Go IO Reader 最佳实践")
|
||||
buf := make([]byte, 16)
|
||||
|
||||
// 打开文件写入自定义Reader读取的数据
|
||||
file, err := os.Create("io/reader.txt")
|
||||
if err != nil {
|
||||
fmt.Printf("创建文件失败: %v\n", err)
|
||||
return
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
// 流式读取并写入文件
|
||||
for {
|
||||
n, err := reader.Read(buf)
|
||||
if err == io.EOF {
|
||||
break
|
||||
}
|
||||
if err != nil {
|
||||
errors.New("读取失败")
|
||||
return
|
||||
}
|
||||
_, _ = file.Write(buf[:n])
|
||||
}
|
||||
fmt.Println("自定义Reader读写完成")
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// 打开文件,支持读写+创建+清空
|
||||
file, err := os.OpenFile("io/writer.txt", os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644)
|
||||
if err != nil {
|
||||
fmt.Printf("打开文件失败: %v\n", err)
|
||||
return
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
// 待写入数据
|
||||
content := "Go IO Writer 流式写入最佳实践\n支持流式、高性能、可扩展写入"
|
||||
data := []byte(content)
|
||||
|
||||
// 1. 基础Write写入
|
||||
n, err := file.Write(data)
|
||||
if err != nil {
|
||||
fmt.Printf("写入失败: %v\n", err)
|
||||
return
|
||||
}
|
||||
fmt.Printf("基础写入长度: %d\n", n)
|
||||
|
||||
// 2. 使用io.WriteString工具方法写入
|
||||
_, err = io.WriteString(file, "\n补充内容:io.Writer是Go IO核心抽象")
|
||||
if err != nil {
|
||||
fmt.Printf("字符串写入失败: %v\n", err)
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Println("io.Writer 流式写入完成")
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
Go IO Reader 最佳实践
|
||||
@@ -0,0 +1,3 @@
|
||||
Go IO Writer 流式写入最佳实践
|
||||
支持流式、高性能、可扩展写入
|
||||
补充内容:io.Writer是Go IO核心抽象
|
||||
Reference in New Issue
Block a user