io.TeeReader()
函数用于同时读取输入流并将其复制到输出流中。
io.TeeReader()
函数的作用是将一个输入流 Reader
复制到一个输出流 Writer
中,并返回一个新的 Reader
,该 Reader
可以同时读取输入流并将其复制到输出流中。这在需要同时对输入流进行处理并将其保存到输出流中时非常方便。
函数定义
1
|
func TeeReader(r Reader, w Writer) Reader
|
使用示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
import (
"io"
"log"
"os"
"strings"
)
func main() {
// 创建了一个字符串输入流,并使用 os.Stdout 作为输出流
var input = strings.NewReader("some io.Reader stream to be read\n")
output := os.Stdout
// 创建了一个新的 Reader, 这个 Reader 可以同时读取输入流并将其复制到输出流中
reader = io.TeeReader(input, output)
// Everything read from reader will be copied to stdout.
// if _, err := io.ReadAll(reader); err != nil {
// log.Fatal(err)
// }
// 创建了一个缓冲区 buf,并使用 Reader.Read() 方法从 TeeReader 读取数据并将其存储到缓冲区中
buf := make([]byte, input.Len())
n, err := reader.Read(buf)
if err != nil && err != io.EOF {
fmt.Println("Error:", err)
return
}
fmt.Printf("Read %d bytes: %s\n", n, buf[:n])
}
|
参考