我正在CentOS7和Jetty9环境中开发文件上传功能。一切都运行正常,但我注意到我的输入流中的数据非常小。我在while循环中每次读取后都计算了字节数。
while ((bytesCount = inStream.read(byteArray)) != -1) {
...
logger.trace("bytecount: " + bytesCount);
...
}
日志:
... bytecount: 3844
... bytecount: 4052
... bytecount: 44
... bytecount: 4052
.....
.....
我的TCP套接字缓冲区大小:
cat /proc/sys/net/ipv4/tcp_rmem
4096 87380 6291456
我的Jetty9服务器是否减少了数据,因此输入流每次读取呼叫只接收大约4KB的数据?还是我需要调整我的Linux TCP Socket?
感谢。
答案 0 :(得分:1)
byteArray
的大小不会决定最小读取大小。 Java具有底层流,因此当它们达到byteArray
的最大值时,您将获得字节。
如果你想强制它,你可以调整你的Linux TCP套接字。
另一方面,如果您不想在java中使用数组大小,可以使用ByteArrayOutputStream
toByteArray()
方法,这将返回适当大小的数组,或者谷歌番石榴的byte[] bytes = ByteStreams.toByteArray(inputStream);