クライアント側にこのコードがあります:
DataInputStream dis = new DataInputStream(socketChannel.socket().getInputStream());
while(dis.available()){
SomeOtherClass.method(dis);
}
しかし、ストリームに読み取り可能なデータがありますが、available()
を返し続けます。0
そのため、読み取られる実際のデータが終了した後、空のデータが読み取られる他のクラスに渡され、これが破損の原因になります。
少し検索した後; ソケットで使用する場合は信頼性available()
が低く、ストリームから最初の数バイトを読み取って、データが解析可能かどうかを実際に確認する必要があることがわかりました。
しかし、私の場合は; DataInputStream
ソケットから取得した参照を、変更できない他のクラスに渡す必要があります。
破損せずに数バイトを読み取ることは可能DataInputStream
ですか、または他の提案はありますか?