在移植到Java的c中的sizeof

时间:2014-10-05 09:18:37

标签: java c serialization fseek

我有像C这样的代码

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

现在我必须将它移植到Java中我该怎么做。“cnum”是C中的一个结构,所以我用Java创建了一个类。但是关于那个fseek我怎么能指向Java中File的确切位置

1 个答案:

答案 0 :(得分:2)

您的C设计已损坏,您无法在Java中执行您想要的操作。

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

Java根本不允许这种尝试。 Java内存模型显式隐藏了有关运行时内存打包的信息,JVM可以根据自己的需要组织内存管理。

相反,请定义用于保存数据的清晰格式,包括字节序,并使用两种语言中的格式。