在C中解码java序列化的.dat文件

时间:2012-03-09 21:45:00

标签: java c serialization

是否可以在 C 中解码java序列化的.dat文件?

我在java项目中有一个文件,我在java项目中阅读如下:

FileInputStream in = new FileInputStream(.dat file path);
ObjectInputStream si = new ObjectInputStream(in);
si.readUTF();

si.readBoolean()
int num=si.readInt();

如何将此代码转换为 C ?我知道第一个字符是utf字符,第二个字符是布尔值,第三个字符是int。

unsigned char buf[16];
FILE *fp = fopen((const char*)[filePath UTF8String], "rb");
fread(buf, 4, 1, fp); // read 4 bytes
printf("%s", buf);

1 个答案:

答案 0 :(得分:3)

The official Javadocs for the DataInput interface准确指定从流中读取的readUTFreadBooleanreadInt。只需在C中实现,完全按照描述,你会没事的。

我看到你正在使用Objective-C;对于readUTF,尤其是在使用[[NSString alloc] initWithBytes:byteArray length:length encoding:NSUTF8StringEncoding]读取适当的字节数后,可以构造NSString。

顺便说一句,你的Java代码是浪费的:当它真正只需要一个ObjectInputStream时它正在使用DataInputStream,这更简单并且提供了你正在使用的相同方法。 (特别是我注意到这一点,因为如果你已经使用ObjectInputStream的预期功能,即读取序列化的Java对象,那么它将是更难在C中编写解码,因为格式更加复杂,并且设计用于包含Java标准库的系统。)