可以尝试在读取数据时判断读取的字节数是否为-1,若为-1则表示流已结束。
示例代码:
AsynchronousSocketChannel socketChannel = AsynchronousSocketChannel.open();
ByteBuffer buffer = ByteBuffer.allocate(1024);
socketChannel.read(buffer, attachment, new CompletionHandler() {
@Override
public void completed(Integer result, Object attachment) {
if (result == -1) {
// 流已结束
return;
}
// 处理接收到的数据
// ...
// 继续读取数据
socketChannel.read(buffer, attachment, this);
}
@Override
public void failed(Throwable exc, Object attachment) {
// 处理异常
// ...
}
});