2016-03-26 19 views
1

これは新しいタイプの質問です。私はjavaでwriteObjectメソッドを使ってファイルを保存しています。私はC++を使ってC++ベースのコードを読む必要があります。私はバイナリファイルを使って読み込みしようとしましたが、正しく読み込めませんでした。Java(writeObject)で保存されたファイルをC++で読み取るにはどうすればいいですか

char buffString[50]; 

char buffer[100]; 
std::ifstream conFile(configFileName, std::ios::in|std::ios::binary); 
//conFile.read(buffer, 100); 
std::cout << buffer << std::endl; 
if (!conFile) { 
    std::cout << " Error reading thee file " << std::endl; 
} else { 
    std::cout << "Trying to read." << std::endl; 
    conFile.seekg(0); 
    conFile.read(buffer,14); strcpy(buffString, buffer); 
    std::cout << buffString << " buffer " << buffer << std::endl; 
} 

このconFileが指すデータファイルには、string、integer、およびdoubleが含まれています。

trapezDET.pngtcmstMeVsrjava.lang.DoubleJ)kDvaluexrjava.lang.Number XP @ DSQ〜@ NSQ〜@ DSQ〜:ファイルには、次のようなものが含まれています@V srjava.lang.Integer⠤ 8Ivaluexq〜sq〜? sq〜sq〜? sq〜q〜sq〜@F sq〜? sq〜? sq〜? SQ〜?ZG {T5 /ホーム/ベガ/ NetBeansProjects /トム/データ/ 6133.root

私はそれを把握することができなかった間、私はネットを検索。 ありがとうございました

+1

ファイルをプレーンテキストとして保存することをお勧めします。 Javaだけでも、デフォルトのオブジェクト直列化を使用して構成値を格納することはお勧めしません。 – Marvin

+0

なぜそれをしたいですか?つまり、ここでの意図は重要です。 – perencia

+2

標準形式で保存します。キーと値のペア、yaml、xml、json、Javaオブジェクトのシリアライズ以外のもの – beresfordt

答えて

2

Javaのシリアル化仕様はかなり明確です。このファイル形式を読み込み、何かを作成することがひどく容易ではないだろうしかし

https://docs.oracle.com/javase/6/docs/platform/serialization/spec/serialTOC.html

:私はこれが最新のスペックだと思います。可能であれば、より移植性の高い出力形式をJavaエンドで使用する必要があります。

(ここでは実際にはバイナリ仕様について語っ部分へのリンクがあります:https://docs.oracle.com/javase/6/docs/platform/serialization/spec/protocol.html

+0

私の混乱を解消してくれてありがとう。 – vegaonline

1

「あなたはjava.lang.Stringのような単純な固定のクラスのためにそれを行うことができるようになりますが、一般的に答えはあなたができることですt。一般に、そのようなファイルをデコードするにはJVMが必要です。その理由は、どのクラスも独自のシリアライゼーションサブプロトコルを定義でき、そのクラスのコードだけがそのサブプロトコルが何であるかを知っており、そのコードを実行する唯一の方法はJVMであるからです。

+0

私の混乱を解消してくれてありがとう。 – vegaonline

関連する問題