处理来自同一个 io.Reader 的多次读取
从 io.Reader 流中读取只能执行一次,因为它代表一个顺序数据流。但是,在某些情况下,您可能需要从多个源读取相同的数据。
实现此目的的一种方法是使用 io.TeeReader。此函数创建一个新的 io.Reader 来复制输入数据,允许您创建多个实例,并分别引用原始流。
例如:
package main import ( "bytes" "io" "io/ioutil" "log" "strings" ) func main() { r := strings.NewReader("some io.Reader stream to be read\n") var buf bytes.Buffer tee := io.TeeReader(r, &buf) log.Println(ioutil.ReadAll(tee)) log.Println(ioutil.ReadAll(&buf)) }
在此示例中,首先在 tee 上调用 ioutil.ReadAll(),它从原始流中读取并记录数据。然后,在 &buf 上调用 ioutil.ReadAll(),它会打印来自 TeeReader 的数据副本。
注意: 在尝试从 buf 读取之前先从 tee 读取数据非常重要。否则,缓冲区将为空。
以上是如何在 Go 中多次读取同一个 io.Reader ?的详细内容。更多信息请关注PHP中文网其他相关文章!