如何处理阅读大型二进制文件

3
我有一个超过500MB的大型二进制文件,我想要读取其中一部分并提取数据。我确定不能一次将整个文件全部加载到内存中,那么如何使用十六进制偏移量仅加载其中一部分呢?
我以前从未处理过这类事情,所以不知道从哪里开始。我只想读取和写入文件的是文本。

4
如果您知道偏移量(无论是八进制、十进制还是十六进制的人类表示),那么只需要寻找文件中该部分并读取正确数量的字节即可。如果这对您来说没有意义,那么现在是时候考虑一本新书了。 - Lightness Races in Orbit
1
@LightnessRacesinOrbit:他正在处理文本,所以寻找可能不是一个选项... - K-ballo
1
十六进制偏移量?它们比十进制偏移量更有效吗? - Kerrek SB
2
@Kerrek:它们更加漂亮!而且可以带你走得更远... - Lightness Races in Orbit
1
所以你基本上是在制作一个十六进制编辑器。内存映射文件是你的选择。 :) @SeanHeiss - Aniket Inge
显示剩余12条评论
1个回答

6

使用内存映射文件。这将允许您像处理内存一样处理文件,但它只会每次加载一页到内存中。


3
也许还需要在 POSIX 操作系统中链接 mmap,但是这个想法是完全正确的 :) - Jonas Schäfer
1
它确实会被加载到内存中,但每次只加载一页。 - Alex Chamberlain
太好了!听起来完美。你知道在C++中使用这些的指南或其他资源吗? - Sean Heiss
@Alex,正确-但它永远不会完全加载到内存中。谢谢。 - Otávio Décio
@OtávioDécio 那是针对 C#/VB 的。那么 C++ 呢? - Sean Heiss
http://www.codeproject.com/Articles/37201/Simple-File-I-O-Using-Windows-Memory-Mapped-Files - Alex Chamberlain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接