2

私は明らかに問題がどこにあるのかわからない!, 最初にクライアントにbyte[]彼が送ろうとしている長さを送ってくれるように頼み、次に私はその長さをこのように読んだ.

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

しかし、常に i 未満の readBytes を読み続けていました。そして、クライアントが全体を送信すると確信していますbyte[]

読み取りバイトの合計数が i になるまで読み取るために、ループ内に入れようとしましたが、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;
    }
}

何か案は?

4

1 に答える 1

7

これ:

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

する必要があります:

read = inputStreamFromClient.read(b, threshold, b.length - threshold);
于 2012-05-11T22:17:29.090 に答える