2012-05-11 2 views
2

を投げる私は明らかに、私のようなその長さのために読んで、私は私に彼が送信しようとしているbyte[]の長さを送信するためにクライアントを尋ねる初!知りませんこの。[]バイトしたInputStreamから読むことはIndexOutOfBoundsException

int i = 323292; // length of incoming Byte[] 
byte[] b = new byte[i]; 
int readBytes=inputStream.read(b,0,b.length); 

しかし、常にreadBytesをi未満に保ちました。そして私は、クライアントが全体byte[]を送信することを確信しています。

私は読み取りバイトの私の合計数まで読むために、ループ内でそれを入れてみましたが、私ですが、私はいつも2回目の反復後にはIndexOutOfBoundsExceptionを入手します!ここにコードは

boolean flag = true; 
int i = 323292; 
int threshold = 0; 
byte[] b = new byte[i]; 
int read = 0; 
while (flag) { 
    if (threshold < i) { 
     System.out.println(threshold); 
     try { 
      read = inputStreamFromClient.read(b, threshold, b.length); 
     } catch (IOException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 
     threshold = threshold + read; 
    } else { 
     flag = false; 
    } 
} 

AnyIdeas?

+1

あなたは本当に自分自身にいくつかの符号化時間や不必要な複雑さを保存するためにコモンズのIOパッケージのいずれかを使用する必要があります。 ORG/IO/APIリリース/組織/ apacheの/コモン/ IO/IOUtils.html#toByteArray(java.io.InputStreamを)あなたの助けのための – grahamrb

+0

おかげで、私はそれをチェックします! –

+0

この簡単なタスクでは、サードパーティのソフトウェアは必要ありません。 'DataInputStream.readFully()'を参照してください。 – EJP

答えて

7

この:

read = inputStreamFromClient.read(b, threshold, b.length); 

はする必要があります:http://commons.apache

read = inputStreamFromClient.read(b, threshold, b.length - threshold); 
+0

あなたは命の恩人です!ありがとう! –

+0

と 'threshold'は通常'・オフセットと呼ばれます。 APIのドキュメントを参照してください。 – EJP

関連する問題