は、私は基本的に自分自身のバイナリシリアライゼーションクラス、ちょっとBinaryFormatter
クラスが何をしているのかを作成したいです。これを行うには、どうすればBinaryReader
とBinaryWriter
クラスを使用できますか? 私はアイデアのコードを望んでいません。おかげさまで PS:BinaryFormatter
を使用するように教えてください。BinaryReaderとBinaryWriterを使用して独自のバイナリシリアライザを作成するにはどうすればよいですか?
答えて
シリアル化の実装方法を確認するには、C#のソースコードsharpserializerを参照してください。ソースコードはhereです。コードはwindowsmobile、silverlightでも動作します。
最終的には、種類ごとの戦略を選択した後、ちょうどそれぞれに切り替える必要があり、 BinaryWriterにはInt32、Stringなどを書き込むメソッドがあるので、基本的なアプローチはte FieldInfo/PropertyInfoの有効なタイプのGetTypeCodeで多くのリフレクションとスイッチを使用することです。
私は実際にこれを行って、私は実際にを避ける BinaryReader/Writer、そしてストリームのためにまっすぐに行く(働くための浮動小数点[]バッファで)。
は、高度な取得、あなたはメンバーごと、またはタイプのプリコンパイル何かにメタプログラミングを使って反射量を減らすかもしれません。
他の事は考慮します(もしあれば)
- どのヘッダデータが必要なん
どちらも簡単に解決できます
なぜあなたは 'BinaryReader'と' BinaryWriter'を避けますか?私は(ほとんど)良い効果のためにそれらを使用しました。私は今や邪魔になることを認めますが、一般的には好きです。 'byte []'バッファを使う利点は何ですか? –
@ジム - 私の場合、データ形式はBinaryReader/Writerが選択するもの(protobufはvarint可変長エンコーディングを使用します)と完全に一致せず、かなりのバイナリジャグリングがあります。それをスクラッチバッファに直接書き込んで、Read/Write呼び出しの回数を最小限に抑えることもできます。フルになったらバッファがフラッシュされることに注意してください。メモリ全体をアセンブルしないでください(メモリオーバーヘッドが大きくなります)。しかし、主に最初の理由:それは私にanythigを提供してくれませんでした –
ええ、可変長エンコーディングは、それらの痛みのようなものです。情報をありがとう。 –
私は、セットアップクラスの属性を使用してすることができますし、それがすべてのバイナリシリアライズ/デシリアライズを処理するた、ProtoBuf .Netのようなものを使用することをお勧めします。
私は最近、よりコンパクトな形式でジェネリッククラス内の顧客のシリアル化のサポートを提供することを強化しなければなりませんでした。 Marcと同様に、特定の型のシリアル化/逆シリアル化を処理し、次に書きたい特定のオブジェクトの型のコードを実行するように切り替えるコードを持つだけです。ここで
は、私はジェネリッククラス内のデータの直列化を可能にするために取ったアプローチの基本的なアウトラインです:
MemoryStream stream = new MemoryStream();
BinaryWriter writer = new BinaryWriter(stream);
writer.Write(_size);
for (int i = 0; i < _size; i++)
_indices[i].AddToStream(writer);
if (_serializeDataToStream == null)
_serializeDataToStream = (Action<BinaryWriter, int, T[]>)GetTypeSpecificSerializationMethod();
_serializeDataToStream(writer, _size, _data);
return stream.ToArray();
それだけで見上げする必要があるので、これは一般的なクラスの内部で、_serializeDataToStreamは静的ですジェネリックタイプごとに1回
private Delegate GetTypeSpecificSerializationMethod()
{
if (typeof(T) == typeof(double))
{
MethodInfo method = this.GetType().GetMethod("SerializeDouble", BindingFlags.Static | BindingFlags.NonPublic);
return Delegate.CreateDelegate(typeof(Action<BinaryWriter, int, T[]>), method);
}
else if (typeof(T) == typeof(ushort))
{
...
private static void SerializeDouble(BinaryWriter writer, int size, double[] data)
{
for (int i = 0; i < size; i++)
{
writer.Write(data[i]);
}
}
- 1. C++ BinaryReaderとBinaryWriter
- 2. C++のBinaryWriterとBinaryReader
- 3. ログフォーマットを使用して独自のコンソールログを作成するにはどうすればいいですか?
- 4. JavaでAESアルゴリズム用に独自のキーを作成するにはどうすればよいですか?
- 5. java/jsfコード用に独自のパーサーを作成するにはどうすればよいですか?
- 6. Android App用に独自の広告エンジンを作成するにはどうすればよいですか?
- 7. ビュー用に独自のASP.NET MVCスキャフォールディングテンプレートを作成するにはどうすればよいですか?
- 8. Webstorm用の独自のプラグインを作成するにはどうすればよいですか?
- 9. BinaryReaderとBinaryWriter for dynamic short array
- 10. Facebookユーザーオブジェクトを使用して独自のユーザーオブジェクトを取得するにはどうすればよいですか?
- 11. j2meプロジェクト用に独自のjarビルダーを作成するにはどうすればいいですか?
- 12. PlovrでClosureテンプレートの独自のカスタム関数を作成するにはどうすればよいですか
- 13. Visual Studio 2013で独自のバージョンの "resx"ファイルを作成するにはどうすればよいですか?
- 14. Eclipseツールバー用の独自のボタンを作成するにはどうすればいいですか?
- 15. 独自のグラフィックスディスプレイエンジンをゼロから作成するにはどうすればよいですか?
- 16. yoctoのラズベリーパイに独自のカーネル構成を使用するにはどうすればいいですか?
- 17. 独自のアクションを持つ「部分」を作成するにはどうすればよいですか?
- 18. Rで独自のオブジェクト/タイプを作成するにはどうすればよいですか?
- 19. python34で独自のカスタム.zip形式を作成するにはどうすればよいですか?
- 20. アンドロイドスタジオで独自のgradle依存関係を作成するにはどうすればよいですか?
- 21. orbeon xformsで独自の検証ルールを作成するにはどうすればよいですか?
- 22. Google AMPで独自のカスタム要素を作成するにはどうすればよいですか?
- 23. 独自のListView UserControlを作成するにはどうすればよいですか?
- 24. 独自のVAST対応動画プレーヤーを作成するにはどうすればよいですか?
- 25. 独自の多次元配列を作成するにはどうすればよいですか?
- 26. 独自のコードジェネレータを作成してEntityオブジェクトを生成するにはどうしたらよいですか?
- 27. Windows phone7でプッシュ通知用に独自のURL(svc)を作成して使用するにはどうすればよいですか?
- 28. 作成した投稿をFlaskの独自のビューに渡すにはどうすればいいですか?
- 29. ExcelベースのVBAユーザーフォームを独自の方法で作成するにはどうすればいいですか?
- 30. 各プロセスが独自のデータコピーを作成することなく、ワーカープロセスでSharedArrayでInterpolationsを使用するにはどうすればよいですか?
BinaryFormatterに何が問題なのか正確に答えることは不可能です。あなたのバージョンはどのように*正確に*動作する必要がありますか? –
私はこれを学習の練習としてやっています。 BinaryFormatterに全く問題はありません+ CFでBinaryFormatterがサポートされていないため、両方の方法で軽量フォーマッタを使用したいと思います。 – gigi
は、ああ、私は始めていない@Hans :)私は...その***全ての午後***についてあなたはまた、既存の公共バイナリシリアル形式で見たいと思うかもしれません –