我有这样的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的确切位置。
我有这样的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的确切位置。
你的C设计已经坏了,你不能做你明显想用Java的东西。
它似乎是通过盲目地将指针转储到磁盘来将信息从C结构中存储出来。除了难以调试之外,任何改变都会使编译器决定以不同的方式打包结构,包括特别为32位和64位或者小端和大端目标编译相同的代码。相反,您应该始终明确地序列化结构化数据。除非有大量的数据,否则人类可读的格式是最好的。
Java根本不允许这种尝试。 Java内存模型明确隐藏了有关运行时内存打包的信息,而且JVM具有很大的自由度来组织内存管理,因为它认为合适。
而是定义一个明确的格式来保存您的数据,包括字节序,并使用这两种语言。
或更好:使用现有的经过测试的序列化格式之一与绑定/库现有的C和Java。 – datenwolf 2014-10-05 10:21:14
@datenwolf ..或者如果你打算自己动手,在试图发明一个更好的轮子之前,先阅读这些图书馆是如何工作的。 – 2014-10-05 10:25:40
['FileChannel.position'](http://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileChannel.html#position(long))应该做的伎俩。 – 2014-10-05 09:20:15
是这是用Java指向文件的唯一方法,但它应该移动的大小如何?我不知道如何去做 – user2983451 2014-10-05 09:38:14