【问题标题】:Read int[][] from file. Java从文件中读取 int[][]。爪哇
【发布时间】:2012-08-21 07:42:19
【问题描述】:

有一个文件是用 Objective C 创建的。在这个文件中有一个数组:int[x][y]。在 C 中“按原样”读取此文件并仅将新 int[][] 的链接作为缓冲区传递是没有问题的。

但我想用 Java 读取这个文件,我尝试将它读取到 int[x*y],但值不同,因为 C 存储双数组 ([][]) 不像简单的 []

我认为有两种方法:重新创建文件以在 Java 中使用或在 Java 中使用 C++,但也许有一些更简单的方法?

更新

文件的创建(inf Objective C)(数组的大小每次都是固定的)

NSData *mydata = [NSData dataWithBytes:&areas length:sizeof(areas)];
[mydata writeToFile:filePathData options:NSDataWritingAtomic error:&error];

【问题讨论】:

  • 你知道 C 应用程序创建的文件的确切结构吗?
  • 你是如何用 C 语言编写文件的?
  • 你怎么知道“值是不同的,因为 C 存储 [][] 不像简单的 []”?
  • 我只建议错误可能是因为存储方式

标签: java objective-c arrays file binaryfiles


【解决方案1】:

我想问题是您将小端 C 数据读取为大端。如果您使用 DataInputStream 它假定大端,这只是 C 在大端机器(如 Sparc)上的默认值;)并且现在许多机器几乎都死了。

我假设你知道文件的格式,如果它不包含尺寸(宽度和高度),你知道它们是什么。

我建议您尝试使用ByteBufferorder(ByteOrder.LITTE_ENDIAN) 来读取数据。有很多方法可以做到这一点。如果您的文件小于 2 GB,我会使用内存映射文件。

【讨论】:

    【解决方案2】:

    Java中也有多维数组的概念。

    只需复制C的编写器算法并以相反的顺序将其翻译成java,即开始将其读入java的二维数组。您将获得所需的输出。

    【讨论】:

      猜你喜欢
      • 2015-08-20
      • 1970-01-01
      • 1970-01-01
      • 2013-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-19
      • 1970-01-01
      相关资源
      最近更新 更多