【问题标题】:How can I read a binary file in sections?如何分段读取二进制文件?
【发布时间】:2020-09-16 23:15:06
【问题描述】:

如何分段读取二进制文件? (阅读一些,快进,阅读更多,...)

我尝试了fn (f &File) read_bytes(size int) 函数,但很惊讶它总是从前面读取。

我们真的需要重新实现 C File 结构(V 也重新实现)来跟踪当前文件位置吗?

【问题讨论】:

    标签: vlang


    【解决方案1】:

    您可以使用File.read_bytes_at。您需要自己跟踪位置:

    import os
    
    path :='v.exe'
    size :=1024*256
    
    mut f := os.open(path) or {println(err) return}
    for pos := 0;; pos += size {
        arr := f.read_bytes_at(size, pos)
        println(arr.len)
        if arr.len == 0 {break}
    }
    f.close()
    

    对我来说,这给出了以下输出:

    262144
    262144
    262144
    262144
    186094
    0
    

    更新: 在 git master 我添加了一个函数,可以将数据读入缓冲区以避免在每次调用时分配:

        mut arr := []byte{len: size}
        ...
        nread := f.read_bytes_into(pos, arr) or {
            panic(err)
        }
        if nread == 0 {break}
    

    【讨论】:

      猜你喜欢
      • 2021-11-01
      • 1970-01-01
      • 2019-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多