2012-03-30 34 views
1

パート:私は私にどのように多くのバイトを来るかわからないJavaの無制限の配列

byte[] bytes = new byte[8000]; 
final DataInputStream in = new DataInputStream(s.getInputStream()); 
final int input = in.read(bytes); 

。無制限の配列はできますか?どのような状況でこの状況で最高ですか?

+0

ArrayListまたはLinkedListの場合、インデックスに追加するだけで済みます。 –

+1

C++の部分を編集しました。これらは完全に異なる2つの言語です。 (1つの質問につき1つの質問) – Mat

+3

この質問の回答を参照してください:http://stackoverflow.com/questions/5923817/how-to-clone-an-inputstream –

答えて

1

あなたが読んだときに多くのデータが利用可能になる方法がわからないサポートするJavaのバージョンを使用している場合ByteBufferを使用してはるかに良いです。例えば。ソケットが最後に書き込まれた時間が16KBだった場合は、それよりも少なくてもこれより多く読むことができます。

あなたが知る必要がないことを前提としたコードを書く必要があります。これにより、長さにかかわらず到着時にデータを処理することができます。


固定長のデータブロックを送信する予定の場合は、まずサイズを送信してください。

byte[] bytes = new byte[1024]; 
final DataInputStream in = new DataInputStream(s.getInputStream()); 

int length = in.readInt(); 
if (length > bytes.length) bytes = new byte[length]; 
in.readFully(bytes, 0, length); // read length bytes or throw an exception.