2012-03-09 5 views
2

javaシリアル化された.datファイルをCにデコードすることはできますか?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文字で、2番目の文字がブール値で、3番目が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

私の知る限り、Java:UTF = 4バイト、ブール= 1バイト、Int = 4バイト。しかし、データを書き出し、それが出力のサイズであることを確認する必要があります。 – MichaelHouse

答えて

3

The official Javadocs for the DataInput interfaceまさにreadUTFreadBoolean、そしてストリームからreadIntの読み取りを指定します。正確に説明に従うだけで、C言語でそれらを実装すれば、うまくいくでしょう。

私はあなたがObjective-Cを使っているのを見ています。 readUTFの場合は特に、[[NSString alloc] initWithBytes:byteArray length:length encoding:NSUTF8StringEncoding]を使用して適切なバイト数を読み込んだ後にNSStringを構築できます。

ところで、あなたのJavaコードは無駄です:実際にはDataInputStreamが必要なときはを使用しています。これははるかに簡単で、使用しているのと同じ方法を提供します。あなたはObjectInputStreamの意図した機能を使用していた場合、すなわち読書直列化されたJavaは、フォーマットがはるかにあるので、Cの復号書くことはるかに困難になり、オブジェクトので(これは特に、私の通知に来ました複雑で、Java標準ライブラリを含むシステムで使用するように設計されています)。

関連する問題