2017-06-06 273 views
1

我正在CentOS7和Jetty9环境中开发文件上传功能。一切工作正常,但我注意到,我的输入流中的数据非常小。每次在while循环中读取之后,我都会计算字节数。如何调整Java InputStream大小

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服务器,以减少数据,因而InputStream接收大约只有4KB数据每一次读打电话?或者我需要调整我的Linux TCP套接字?

谢谢。

+0

如何'byteArray'初始化? – Berger

+0

您的输入流是否缓冲? – RealSkeptic

+0

Hi @Berger,以以下方式初始化的byteArray:byte [] byteArray = new byte [8192];所以,我期待我的bytesCount应该在8KB左右。 – MFH

回答

1

byteArray的大小不会决定最小读取大小。 Java有底层流,所以你会得到字节,因为它们的最大值为byteArray的大小。

如果你想强制它,你可以调整你的Linux TCP套接字。

在另一方面,如果你不想在Java中,你阵列尺寸播放,您可以使用ByteArrayOutputStreamtoByteArray()方法,该方法将返回适当大小的数组,或谷歌番石榴的byte[] bytes = ByteStreams.toByteArray(inputStream);