パート:私は私にどのように多くのバイトを来るかわからないJavaの無制限の配列
byte[] bytes = new byte[8000];
final DataInputStream in = new DataInputStream(s.getInputStream());
final int input = in.read(bytes);
。無制限の配列はできますか?どのような状況でこの状況で最高ですか?
パート:私は私にどのように多くのバイトを来るかわからないJavaの無制限の配列
byte[] bytes = new byte[8000];
final DataInputStream in = new DataInputStream(s.getInputStream());
final int input = in.read(bytes);
。無制限の配列はできますか?どのような状況でこの状況で最高ですか?
あなたが読んだときに多くのデータが利用可能になる方法がわからないサポートする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.
あなたはそれが
ArrayListまたはLinkedListの場合、インデックスに追加するだけで済みます。 –
C++の部分を編集しました。これらは完全に異なる2つの言語です。 (1つの質問につき1つの質問) – Mat
この質問の回答を参照してください:http://stackoverflow.com/questions/5923817/how-to-clone-an-inputstream –