Go中使用io.Reader
在流中跳过多个字节的最佳方法是什么?也就是说,标准库中是否有一个函数带有一个 reader 和一个 count ,它将从读取并处理 count 个字节>读取器
示例用例:
func DoWithReader(r io.Reader) {
SkipNBytes(r, 30); // Read and dispose 30 bytes from reader
}
我不需要在流中向后移动,因此在不将io.Reader
转换为其他读者类型的情况下可以使用的任何内容都是首选。
答案 0 :(得分:17)
你可以使用这种结构:
import "io"
import "io/ioutil"
io.CopyN(ioutil.Discard, yourReader, count)
它将请求的字节数复制到io.Writer
中,丢弃它所读取的内容。
如果您的io.Reader
是io.Seeker
,您可能需要考虑在流中尝试跳过您要跳过的字节数:
import "io"
import "io/ioutil"
switch r := yourReader.(type) {
case io.Seeker:
r.Seek(count, io.SeekCurrent)
default:
io.CopyN(ioutil.Discard, r, count)
}
答案 1 :(得分:-4)