我想异步读取活动tcp连接的InputStream中的所有字节。 inputbuffer中可能没有任何内容,在这种情况下,我想要一个空字节数组[]而不是读取/超时。
我试过了:
byte[] bytes = IOUtils.toByteArray(tcpInputStream);
但是如果InputStream中没有任何内容,则读取会挂起,直到tcp超时,然后抛出异常。
答案 0 :(得分:0)
您可以使用非阻塞的SocketChannels:
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;
...
SocketChannel socketChannel = SocketChannel.open();
socketChannel.connect(new InetSocketAddress("127.0.0.1", 80));
ByteBuffer buffer = ByteBuffer.allocate(2048);
int bytesRead;
while ((bytesRead = socketChannel.read(buffer)) >= 0) {
if (bytesRead == 0)
Thread.sleep(1000); // do usefull stuff
else {
// use the bytes and prepare the buffer for next read
buffer.clear();
}
}
socketChannel.close();
当服务器关闭连接时,也准备IOException
。