vlang - 如何分段读取二进制文件?
问题描述
如何分段读取二进制文件?(阅读一些,快进,阅读更多,...)
我尝试了这个fn (f &File) read_bytes(size int)
功能,但很惊讶它总是从前面读取。
我们真的需要重新实现 CFile
结构(V
也重新实现)来跟踪当前文件位置吗?
解决方案
您可以使用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}
推荐阅读
- arrays - 红宝石 | 如何转换邮件之类的数字?
- bash - bash脚本中变量的正则表达式
- git - gitignore 目录只有当它们包含一个特殊的子目录时
- batch-file - 如何获取和评估可执行文件的版本以确定是否应该安装更新?
- python - Python make a function always use a thread without calling thread.start()
- javascript - Building velo query function to sum total values from multiple datasets
- javascript - 我如何交换两个 bootstrap-vue 多个选择框的选定选项?
- javascript - why search not working after replace a letter in react-select
- c# - C# PropertyGrid UITypeEditor Agnostic to the object and property
- linux - mmap speed compared to read and write