Files
bulma/io/io_reader_demo.go
T

60 lines
1.1 KiB
Go

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读写完成")
}