次のコードを使用して、ネットワークソケットからデータを読み取ろうとしています-
Socket s = new Socket(address, 502);
response = new byte[1024];
InputStream is = s.getInputStream();
int count = is.read(response, 0, 100);
データ量は多くありません。全部で 16 バイトです。ただし、read() ステートメントは、一度にすべてのデータを読み取るわけではありません。バッファには 8 バイトのデータしか読み込まれません。
データを読み取るには、このように read() を複数回呼び出す必要があります-
Socket s = new Socket(address, 502);
response = new byte[1024];
InputStream is = s.getInputStream();
int count = is.read(response, 0, 100);
count += is.read(response, count, 100-count);
なぜこうなった?read() が一度にストリーム全体を読み取らないのはなぜですか?
データは順次到着していませんのでご注意ください。Thread.sleep(2000) を呼び出してデータを読み取る前に 2 秒間待機すると、動作は変わりません。