从文件中读取int[][]。JAVA

从文件中读取int[][]。JAVA,java,objective-c,arrays,file,binaryfiles,Java,Objective C,Arrays,File,Binaryfiles,有一个文件是用Objective C创建的。在此文件中有一个数组:int[x][y]。在C中按原样读取此文件并将新int[][]的链接作为缓冲区传递是没有问题的 但是我想用Java读取这个文件,我试着将它读取到int[x*y],但是值是不同的,因为C存储的是双数组([]]),而不是简单的[] 我认为有2种方法:在Java中重新使用文件或使用java中的C++ java,但可能有更简单的方法? 已更新 创建文件(inf目标C)(数组的大小每次都是固定的) 我想问题是你把小端C数据读作大端。如果使用

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

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

我认为有2种方法:在Java中重新使用文件或使用java中的C++ java,但可能有更简单的方法?

已更新

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


我想问题是你把小端C数据读作大端。如果使用DataInputStream,则假定big-endian是big-endian机器(如Sparc;)上C的默认值还有一些机器现在几乎都死了

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


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

我想问题是您正在将小端C数据读取为大端。如果使用DataInputStream,则假定big-endian是big-endian机器(如Sparc;)上C的默认值还有一些机器现在几乎都死了

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


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

Java中也有多维数组的概念


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

java中也有多维数组的概念


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

您知道C应用程序创建的文件的确切结构吗?您是如何用C编写文件的?您如何知道“值不同,因为C存储[][]不喜欢简单的[]“?我只建议错误可能是因为存储方式。你知道C应用程序创建的文件的确切结构吗?你是如何用C编写文件的?你如何知道“值是不同的,因为C存储[]不喜欢简单的[]”?我只建议错误可能是因为存储方式
NSData *mydata = [NSData dataWithBytes:&areas length:sizeof(areas)];
[mydata writeToFile:filePathData options:NSDataWritingAtomic error:&error];