2012-03-25 12 views
0

C++でオブジェクトのバイトストリームを取得する必要があります。 シリアル化を使用せずにこれを行う方法が見つかりませんでした。C++オブジェクトのシリアル化

NodeEntry *one = new NodeEntry("mani", 34, 56.3); 

ofstream rofs("result.ros", ios::binary); 
rofs.write((char *)&one, sizeof(one)); 
rofs.close(); 

// now we read the file into object!!  
ifstream ifsr("result.ros", ios::binary); 
NodeEntry *oner; 
ifsr.read((char *)&oner, sizeof(oner)); 

その他の回避策はありますか?私はこのオブジェクトをネットワーク経由で送信したり、ハードディスクに保存したりしたくありません。オブジェクトのバイトストリームを実際にファイルを作成せずににしたいだけです。他の言葉で

Iは物体のバイトストリームを作成して(のostreamのように)どこかに保存し、別の方法でこれらのバイトを通過し、これらのバイトからオブジェクトを再構築する必要があります。

私はあなたにこれについてのヒントを与えていただければ幸いです。

+0

「バイトストリーム」とはどういう意味ですか?あなたはそれをどうしたいのですか? –

+1

msgPackやThriftのようなシリアライゼーションフレームワークをチェックしてください。ここで説明するアプローチは、文字列や複雑なデータ構造では機能しません。 –

+0

@OliCharlesworth:何らかの計算をするためにバイトストリームが必要です(Rabinのアルゴリズム用)。 – ManiAm

答えて

2

oneという住所を書いていることに気付かれますか?あなたがオブジェクトの内容を書きたい場合は、あなたがwritesizeof(NodeEntry)oneを渡すと思いますが、Dvirボルクは言及として、これは動作しません

NodeEntry** doublePtr = &one; 
oner = *doublePtr; 

:基本的に何を書いたことに相当しますポインタが入っているものであれば、それはあなたが望む方法ではないでしょう。

とにかく、私はGoogle's Protocol Buffersのオブジェクトをシリアライズするのが好きです。これはあなたの問題をはるかに堅牢な解決策です。

また、「バイトストリーム」は意味をなしません...バイト単位のオブジェクトの生のメモリを意味しますか?

関連する問題