2017-06-06 2 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サーバなので、各4KBのデータの周りにのみ受信するInputStream呼ん読みますか? Linux TCPソケットを調整する必要がありますか?

ありがとうございました。

+0

'byteArray'は初期化されていますか? – Berger

+0

入力ストリームはバッファされていますか? – RealSkeptic

+0

こんにちは@Berger、byteArrayは次のように初期化されました:byte [] byteArray = new byte [8192];だから、私はbytesCountが約8KBになるはずです。 – MFH

答えて

1

byteArrayのサイズは、最小読み取りサイズを決定しません。 Javaには基本ストリームがあるため、最大でbyteArrayのサイズになるまでバイトを取得します。

強制する場合は、Linux TCPソケットを調整することができます。どのように一方

、あなたは適切なサイズの配列を返しますtoByteArray()方法、でByteArrayOutputStreamを使用することができますJavaであなたの配列サイズでプレーしたくない場合、またはグーグルグアバのbyte[] bytes = ByteStreams.toByteArray(inputStream);

関連する問題