私のシステムでは、TCP ソケットを介して非常に大量のデータとメタデータを送信しています。さまざまなメタデータと 20 バイト配列を含む単一のオブジェクトを送信しています。これまで、BufferedOutputStream を囲む ObjectOutputStream を使用して、小さな例 (130kB 配列) に取り組んできました。目標の 67MB 配列に到達しようとしましたが、ObjectOutputStream はそれほど多くのデータを処理できません。1MB の配列を送信できましたが、writeObject() が 2MB でハングアップしました。
DataOutputStream の方が速いと聞いたことがありますが、メタデータをバイトとしてエンコードし、反対側でデコードする必要はありません。非常に大きなオブジェクトをすばやく送信できる良い代替手段はありますか?
編集:
各書き込みメソッドの後に、すでに reset() を使用しています。私は現在、20 個の配列と多数のメタデータ フィールドを含む独自の Message オブジェクトを含む単一の SignedObject を送信しています。便利なのでまとめておいたほうがいいのですが、分別しかないことも承知しています。そうは言っても、すべての送信が安全であることを確認する必要があります。
アップデート:
それで私は昼食に行き、戻ってきて、送信側と受信側のどちらで問題が発生しているかを調べてみることにしました。そして、それは決してハングアップしませんでした。ヒープを使い果たすまで、最大 4MB の配列を正常に送信し続けることができました (これは無関係であり、より優れたコンピューターまたはより効率的な処理が必要であることを意味します)。それで、問題は解決したと思いますか?これを伝えるためのより良い方法が必要ないという意味ではありません。また、これを更新するとすぐに、再び機能しなくなると思います...