作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我需要在接收到字节时将它们递增地追加到缓冲区中,以便稍后再次读取它们。像这样:
type TwoPassReader struct {
someDataSource SomeDataReader
secondPassReader io.Reader
}
func (r *TwoPassReader) Read(b []byte) (n int, err error) {
n, err := r.someDataSource.Read(b)
if err == nil {
//XXX: this doesn't actually exist, right?
bytesAppended, writeErr := r.secondPassReader.Write(b)
}
return n, err
}
func (r *) ReadSecondPass(b []byte) (n int, err error) {
return r.secondPassReader.Read(b)
}
虽然这个问题的简单答案是使用 bufio.Reader.Peek
,但我有一个无法修改的 SomeDataReader
对象,而不是 Reader。最好的解决方案是将数据放入 []byte
并在调用 ReadSecondPass
时返回它吗?
最佳答案
是这样的吗?
package main
import (
"bytes"
"io"
)
type TwoPassReader struct {
firstPassReader io.Reader
secondPassBuffer io.ReadWriter
}
func NewTwoPassReader(firstPass io.Reader) *TwoPassReader {
return &TwoPassReader{
firstPassReader: firstPass,
secondPassBuffer: bytes.NewBuffer(nil),
}
}
func (r *TwoPassReader) Read(b []byte) (n int, err error) {
n1, err1 := r.firstPassReader.Read(b)
n2, err2 := r.secondPassBuffer.Write(b[:n1])
if err2 != nil {
return n2, err2
}
return n1, err1
}
func (r *TwoPassReader) ReadSecondPass(b []byte) (n int, err error) {
return r.secondPassBuffer.Read(b)
}
func main() {
}
关于io - 如何将字节推送到 Go 中的读取器中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20666594/
我是一名优秀的程序员,十分优秀!