gpt4 book ai didi

io - 如何将字节推送到 Go 中的读取器中?

转载 作者:IT王子 更新时间:2023-10-29 01:07:35 26 4
gpt4 key购买 nike

我需要在接收到字节时将它们递增地追加到缓冲区中,以便稍后再次读取它们。像这样:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com