关于 NIO 网络编程的一个问题
先上代码
ByteBuffer readBuffer = ByteBuffer.allocate(requestSize);// 这里是 1024*1024*1024 = 1G readBuffer.clear(); SocketChannel socketChannel = (SocketChannel) selectionKey.channel(); while (socketChannel.read(readBuffer) > 0) {} /* 获取请求报文 */ readBuffer.flip(); byte[] bytes = new byte[readBuffer.limit()]; readBuffer.get(bytes);
如上面代码所示,缓冲区 ByteBuffer 的容量设置成了 1G,但是上传一个 30M 左右的文件,经常会丢包,导致文件不全,然后 formData 解析时报错。
这个缓冲区的容量如果比文件大很多,则一点问题都没,但是我又不能把缓冲区设置的太大,否则会堆溢出。
麻烦熟悉 NIO 的 大神们指点一下