【问题标题】:Go: Skip bytes from a stream using io.readerGo:使用 io.reader 从流中跳过字节
【发布时间】:2019-03-15 00:21:33
【问题描述】:

在 Go 中使用 io.Reader 在流中向前跳过多个字节的最佳方法是什么?也就是说,标准库中是否有一个函数需要一个 reader 和一个 count 来读取和处理 count 个字节的 读者

示例用例:

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

我不需要在流中倒退,因此任何可以在不将io.Reader 转换为另一种阅读器类型的情况下工作的东西都是首选。

【问题讨论】:

    标签: go


    【解决方案1】:

    你可以使用这个结构:

    import "io"
    import "io/ioutil"
    
    io.CopyN(ioutil.Discard, yourReader, count)
    

    它将请求的字节数复制到io.Writer 中,该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)
    }
    

    【讨论】:

      猜你喜欢
      • 2012-03-27
      • 2012-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      • 1970-01-01
      • 1970-01-01
      • 2011-11-18
      相关资源
      最近更新 更多