4
回答
这段java的nio读取返回数据是否正确呢?
终于搞明白,存储TCO原来是这样算的>>>   

假设我要从某个远端机器上读取一个数据,发送的数据省略了,主要是 读取服务端返回的数据,服务端的socket一直不会关闭

服务端返回的数据大小未知,可能是几十个字节,或者几十M,假设我的缓冲区大小定义为1K把。然后服务端返回的数据大小为5K,这样最终服务端发包可能会分解成若干个数据包, 

如果这些发送的包之间有延迟的话,比如先发了2K,中间因为延迟,后面的3K数据在1毫秒之后才到达。

那么下面这个代码的while判断逻辑是否可行呢?

首先服务端socket不会关闭,那么肯定不会读到-1,但是不确定是否会读到0的情况,如果像上面说的那样服务端发送有延迟是否会出现读到0?然后循环就退出了呢?

SocketChannel socket = SocketChannel.open();
	socket.connect(new InetSocketAddress("ip", 1234));
	socket.configureBlocking(false);
	int len = -1;
	ByteArrayOutputStream baos = new ByteArrayOutputStream();
	while( (len=socket.read(buffer)) > 0 ) {
            baos.write(buffer.array());
            buffer.flip();
        }
举报
超级呆子
发帖于5年前 4回/317阅
顶部