是否可以在 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);
答案 0 :(得分:3)
The official Javadocs for the DataInput
interface准确指定从流中读取的readUTF
,readBoolean
和readInt
。只需在C中实现,完全按照描述,你会没事的。
我看到你正在使用Objective-C;对于readUTF
,尤其是在使用[[NSString alloc] initWithBytes:byteArray length:length encoding:NSUTF8StringEncoding]
读取适当的字节数后,可以构造NSString。
顺便说一句,你的Java代码是浪费的:当它真正只需要一个ObjectInputStream
时它正在使用DataInputStream
,这更简单并且提供了你正在使用的相同方法。 (特别是我注意到这一点,因为如果你已经使用ObjectInputStream
的预期功能,即读取序列化的Java对象,那么它将是更难在C中编写解码,因为格式更加复杂,并且设计用于包含Java标准库的系统。)