2017-06-06 270 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);