超出缓冲区读取

我有一个缓冲区的大小bufferSize从我的成批读出blockSize,但是,这会产生一些(对我来说)意外的行为,当blockSize超出bufferSize

我把代码放在这里:

http://play.golang.org/p/Ra2jicYHPu

为什么第二个块只给出 4 个字节?这里发生了什么事?

我希望Read总是给出字节数len(byteArray),如果它超出缓冲区,它将通过将缓冲区中的指针设置为 after 来处理这种情况,并将缓冲区byteArray的其余部分 + 超出的任何内容,直到新的缓冲区指针。



摇曳的蔷薇
浏览 248回答 2
2回答

慕勒3428872

您的期望不是基于任何记录在案的bufio.Reader. 如果您希望“读取始终提供字节数 len(byteArray)”,则必须使用io.ReadAtLeast。package mainimport (        "bufio"        "fmt"        "io"        "strings")const bufSize = 10const blockSize = 12func main() {        s := strings.NewReader("some length test string buffer boom")        buffer := bufio.NewReaderSize(s, bufSize)        b := make([]byte, blockSize)        n, err := io.ReadAtLeast(buffer, b, blockSize)        if err != nil {                fmt.Println(err)        }        fmt.Printf("First read got %d bytes: %s\n", n, string(b))        d := make([]byte, blockSize)        n, err = io.ReadAtLeast(buffer, d, blockSize)        if err != nil {                fmt.Println(err)        }        fmt.Printf("Second read got %d bytes: %s\n", n, string(d))}输出:First read got 12 bytes: some length Second read got 12 bytes: test string 
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go