【发布时间】:2014-09-20 07:00:43
【问题描述】:
2.6 GB,32 位有符号整数的二进制文件,每行 100 个元素。
我可以用 Java 逐行阅读:
DataInputStream dis = new DataInputStream(new FileInputStream("input.rawdata"))
for(int i = 0; i < 100; i++){
int idata = dis.readInt();
% DO THE NECESSARY TO LOAD idata IN A VARIABLE ARRAY %
}
dis.close();
但是如果我只想读取第 505 行而不读取最初的 504 行,那该怎么做呢?
或者如果数据是 100 x 1000 矩阵并且希望只读取第 15 到第 80 行和第 100 到第 200 列的矩形。那么如何用上述三种语言(最好是 Python 和 Java)中的任何一种来实现这一点。
非常欢迎有关代码效率的建议。
【问题讨论】:
-
我猜你想要 MMAP?
-
阅读
fseek()并从那里获取。 -
二进制文件中的一行是什么意思?
-
谢谢@NPE & vaultah。函数 seek(file_pointer_location) 正是我想要的;一些我是如何错过在 CS-101 课程作业中学习此功能的。而且 MMAAP 看起来是一种更聪明的方法,我有时肯定会尝试一下。
-
@KlasLindbäck 这实际上是一次雷达采集的数据,这里的线是沿距离方向的像素。数据是一种你可以说的图像文件。当您从商业供应商处获取数据时,他会为您提供一个带有适当内置标题和适当分隔符的文件。不像在雷达采集的情况下,波特率是至关重要的,我们不能奢侈地在记录时添加分隔符。这就是为什么我们将日志记录为二进制文件(我猜这会节省一些内存和处理负载),然后在我们的文件处理过程中,我们将这些行与这些 GB 长的二进制字符串分开。
标签: java python c file binary-data