2014-10-05 45 views
0

我有这样的sizeof在C移植到Java

skip=(unsigned long) (st_row-1)*tot_numcols; 
fseek(infile,sizeof(cnum)*skip,0); 

在C代码现在我已经将它移植到Java我该怎么办That.The“CNUM”是在C结构,所以我创建Java中的一个类。但关于那个fseek,我怎么能指出Java中File的确切位置。

+0

['FileChannel.position'](http://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileChannel.html#position(long))应该做的伎俩。 – 2014-10-05 09:20:15

+0

是这是用Java指向文件的唯一方法,但它应该移动的大小如何?我不知道如何去做 – user2983451 2014-10-05 09:38:14

回答

2

你的C设计已经坏了,你不能做你明显想用Java的东西。

它似乎是通过盲目地将指针转储到磁盘来将信息从C结构中存储出来。除了难以调试之外,任何改变都会使编译器决定以不同的方式打包结构,包括特别为32位和64位或者小端和大端目标编译相同的代码。相反,您应该始终明确地序列化结构化数据。除非有大量的数据,否则人类可读的格式是最好的。

Java根本不允许这种尝试。 Java内存模型明确隐藏了有关运行时内存打包的信息,而且JVM具有很大的自由度来组织内存管理,因为它认为合适。

而是定义一个明确的格式来保存您的数据,包括字节序,并使用这两种语言。

+3

或更好:使用现有的经过测试的序列化格式之一与绑定/库现有的C和Java。 – datenwolf 2014-10-05 10:21:14

+0

@datenwolf ..或者如果你打算自己动手,在试图发明一个更好的轮子之前,先阅读这些图书馆是如何工作的。 – 2014-10-05 10:25:40