Go:使用io.reader从流中删除字节

时间:2013-12-02 03:58:04

标签: go

Go中使用io.Reader在流中跳过多个字节的最佳方法是什么?也就是说,标准库中是否有一个函数带有一个 reader 和一个 count ,它将从读取并处理 count 个字节>读取器

示例用例:

func DoWithReader(r io.Reader) {      
    SkipNBytes(r, 30);     // Read and dispose 30 bytes from reader
}

我不需要在流中向后移动,因此在不将io.Reader转换为其他读者类型的情况下可以使用的任何内容都是首选。

2 个答案:

答案 0 :(得分:17)

你可以使用这种结构:

import "io"
import "io/ioutil"

io.CopyN(ioutil.Discard, yourReader, count)

它将请求的字节数复制到io.Writer中,丢弃它所读取的内容。

如果您的io.Readerio.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)

是:

http://golang.org/pkg/io/#ReadAtLeast

(它有助于阅读文档......)