go - bytes.Buffer ReadFrom 与 r.Read 不同?

标签 go buffer

在连接错误的情况下,我想从 io Reader 获取数据流并在通过 http post 将其作为流发送之前对其进行缓冲。为此,我计划使用 bytes.Buffer 并将其从读取器复制到缓冲区。一个单独的 goroutine 将从缓冲区读取并将读取器传递给 http.Request。

现在,bytes.Buffer ReadFrom 的行为不是我所期望的。我正在用管道模拟数据流:

r, w := io.Pipe()
go func() {
    for i := 0; i < 10; i++ {
        w.Write([]byte(fmt.Sprintf("foobar %d\n", i)))
        time.Sleep(200 * time.Millisecond)
    }
    w.Close()
}()

当从读取器读取 byte slice 时,每次写入后 Read 返回,但是,当使用 ReadFrom 时,它不会停止读取直到写入器关闭。这:

    buf := &bytes.Buffer{}
    nIn, err = buf.ReadFrom(r)

在返回前阅读所有十行,同时:

    buf := make([]byte, 64)
    nIn, err = r.Read(buf)

在每一行之后返回。为什么行为不同?

最佳答案

io.Reader 的行为(Read) 被定义为不同于 io.ReadFrom .

关于go - bytes.Buffer ReadFrom 与 r.Read 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49291920/

相关文章:

c++ - ReadFile 函数 lpbuffer 和字节读取说明

c++ - 在 C++ 中初始化 Halide 缓冲区

javascript - 未找到捆绑文件

javascript - 在 Node.JS 中将多个音频文件合并/合并为一个

Golang - 将 [8]bool 转换为字节

go - 从 golang 中的嵌套映射中检索值

linux - 从汇编文件中读取

c - 释放 C 中阻塞流的缓冲区

go - 测试来自GitHub.com/Shopify/sarama的日志输出

html - 在 GOLANG 中选中或不选中复选框