2016-12-20 13 views
1

最近inputStreamからデータを読み取ろうとしました。BufferedInputStreamとIOUtilsのtoByteArrayを読み取る

int length = getHeader("Content-Length"); 
byte[] buffer = new byte [length];  
BufferedInputStream stream = new BufferedInputStream (servletRequest.getInputStream());  
stream.read(buffer); 

何らかの理由でデータが切り捨てられていました。私が次を試みたとき

buffer = IOUtils.toByteArray(servletRequest.getInputStream()); 

それは完璧に働いた。

誰でも問題の原因を洞察できますか?

+0

@SotiriosDelimanolisコンテンツの長さが正確でない場合はどうなりますか? –

+2

2つのもの。まず、あなたの 'getHeader'は何をしますか?それは正しい価値を戻していますか?次に、 'read(byte [])'はバッファに実際に何バイト読み込まれたかを示す 'int'値を返します。それがあなたが期待したものでない場合は、すべてを読み終えるまで、そのメソッド(またはオフセット付きのオーバーロード)をループする必要があります。これは 'toByteArray'のやり方です。 –

+0

@TimBiegeleisenええ、おそらく問題です。 –

答えて

2

@Gaurav_Joshi

のInputStreamは、あなたの入力ストリームの実際のサイズよりも小さい可能性がDEFAULT_BUFFER_SIZEを、使用して一つの引数を取りにBufferedInputStreamのコンストラクタ。

public BufferedInputStream(InputStream in) { 
    this(in, DEFAULT_BUFFER_SIZE); 
} 
+0

それはまさに私の問題です!私のデータの長さはかなり大きく、DEFAULT_BUFFER_SIZEよりも大きいかもしれません!驚くばかり !ありがとう! –

+0

私はこの答えが質問に答えなかったと信じています。 –

関連する問題