使用Objective C创建了一个文件。在此文件中有一个数组:int[x][y]
。在C中“按原样”读取此文件没有问题,只传递新int[][]
的链接作为缓冲区。
但是我想用Java读取这个文件,我试过把它读到int[x*y]
但是值不同,因为C存储了一个双数组([][]
)而不像简单的[]
。
我认为有两种方法:重新创建文件以便在Java中使用或在java中使用C ++,但也许有一些更简单的方法?
已更新
创建文件(目标C)(每次固定数组的大小)
NSData *mydata = [NSData dataWithBytes:&areas length:sizeof(areas)];
[mydata writeToFile:filePathData options:NSDataWritingAtomic error:&error];
答案 0 :(得分:3)
我想问题是你正在读小端C数据作为大端。如果你使用DataInputStream,它假设大端,这只是大端机器上的C的默认值,例如Sparc;)和许多机器现在都已经死了。
我假设您知道文件的格式,如果它不包含尺寸(宽度和高度),您就知道它们是什么。
我建议您尝试使用ByteBuffer
和order(ByteOrder.LITTE_ENDIAN)
来阅读数据。有很多方法可以做到这一点。如果你的文件小于2 GB,我会使用内存映射文件。
答案 1 :(得分:0)
Java中也有多维数组的概念。
只需复制C的编写器算法并以相反的顺序将其翻译成java,即开始将其读入java的二维数组。您将获得所需的输出。