2つのアプリケーションがあります。Wi-Fi経由で相互に接続されています。サーバーアプリから送信されたデータを読み取るために InputStream を使用しています。コードは標準のもので、
try {
bytesRead = mmInStream.read(buffer, 0, 6300);//read(buffer);
Logger.d(TAG, "Bytes read from inStream : "+bytesRead);
if (-1 != bytesRead) {
handler.obtainMessage(12, bytesRead, -1, buffer).sendToTarget();
} else {
connectionLost();
}
} catch (Exception e) {
e.printStackTrace();
connectionLost();
}
connectionLost メソッドでのスレッドの強制終了とリセット。JSON文字列で、サーバーアプリから6kb近くのデータを送信しています。これは5回中3回機能します。
場合によっては、読み取りで 1.5kb のバッファーが返され、2 回目の実行で残りのデータが返されることがあります。しかし、その間、最初の 1.5 が JSON パーサーに送信され、エラーが発生します。サーバー側からoutputBufferに書き込まれたバイトを出力しました。毎回6kバイトを書き込みます。read() メソッドがストリームの半分だけを読み取り、残りの部分を 2 回目の試行で読み取る理由を知りたいですか?
全データを読み取ったか、半分だけ読み取ったかはどうすればわかりますか? サーバーが送信するバイト数を事前に知りません。(コードをデバッグしているため、番号を思いつきました。その6kは後で変更される可能性があります)。
前もって感謝します。この問題に2日間立ち往生しました。:(