gpt4 book ai didi

go - 如何创建一个先读取N个字节然后读取其余N个字节的读取器?

转载 作者:行者123 更新时间:2023-12-01 22:27:53 27 4
gpt4 key购买 nike

我想一次读取来读取前N个字节,然后我要读取其余的字节,直到 io.EOF 为止。您如何看待以下代码?这是最好的方法吗?

如果给定的阅读器(r)并非以的第一个字节开头,则应返回错误。否则,它将在一组固定字节的
(在代码中标记为“第一个”)之后继续读取其余的

您可以将“第一”部分视为魔术格式签名。

type reader struct {
r io.Reader
first []byte
}

func (r *reader) Read(b []byte) (n int, err error) {
const first = "first"

n, err = r.r.Read(b)
if len(r.first) >= len(first) {
return n, err
}

if l := len(first); n > l {
b = b[:l]
}
r.first = append(r.first, b...)

if len(r.first) >= len(first) {
if !bytes.HasPrefix(r.first, []byte(first)) {
err = errors.New("not first")
}
}
return n, err
}

源代码在操场上:https://play.golang.org/p/4xzEQcaXYXc

最佳答案

您的实现看起来比必要的更加复杂:

type reader struct {
r io.Reader
first []byte
offset int
}

func (r *reader) Read(b []byte) (n int, err error) {
n, err = r.r.Read(b)
for i := 0; r.offset < len(r.first) && i < n; r.offset++ {
if r.first[r.offset] != b[i] {
return n, errors.New("mismatch")
}
i++
}
return n, err
}

关于go - 如何创建一个先读取N个字节然后读取其余N个字节的读取器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58754754/

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