0

TCP経由でデータを受信し、DataInputStreamでデータを読み取り、「動的」サイズのバイト配列にデータを格納するための優れたソリューションがあるかどうかを自問します。バッファに書き込んで、最終的に受信したパケットと同じ大きさの作成された配列に格納するなど、いくつかの解決策を考えました。

ここに例があります:私がTCP経由で(バイトごとに)受信するデータはn * 13バイトの大きさで、パケットの終わりは13バイトのゼロです(13バイトのゼロは一意であり、以前のデータには含めることができません)。次のパケットは、m*13バイト+13バイトのゼロなどです。だから私はストリームを聞いて、例えばゼロなしのバイト配列にn * 13バイトを保存したい(私は前に1つのデータセットのサイズを知らない)。

スリムなやり方を教えていただけますか?

前もって感謝します!

クリス

4

1 に答える 1

0

データを直接ByteBufferに読み込みます。DataInputStreamも必要ありません。ByteBufferを必要以上に大きくします(たとえば、1MBまたは10MB)。未使用の直接バッファー(未使用のネイティブメモリなど)は仮想メモリのみを使用し、実メモリは使用しないという事実を使用します。このバッファは、理想的にはアプリケーションの存続期間中、可能な限り再利用されるようにします。

64ビット環境では、バッファを非常に大きくすることができます。たとえば、大きな影響なしに1GB。

メモリ消費を最小限に抑えたい場合は、データを受け取ったときに処理します。そうすれば、最初に保存する必要がなくなります。最小サイズは13バイトのようで、512バイトや2KBのような妥当なバッファサイズになります。

于 2013-03-20T01:34:27.953 に答える