0

現在、コンテンツ長 37743 の応答からそれほど短くないストリームを読み取ろうとしています。 read(char[] buffer, int offset, int length) を使用していますが、それを私が読んでいる元のjsonファイル。これが一般的な問題であるかどうかを確認しようとしましたが、これが問題になる理由を見つけることができません。

  • 文字列ビルダーの最大長?
  • char[] の最大長 ?
  • バッファ長? (現在8192)
  • while 条件が正しくありませんか? (次のスニペット)
while ((reader.read(buffer, 0, buffer.length)) != -1)
     sb.append(String.valueOf(buffer)); //sb is the String builder

バッファー長が変更されると、結果が再び変化することに注意してください。たとえば、1024 に変更すると、8192 バッファーで得られた同じ結果に加えて、元の json 文字列と一致しない別のテキストが得られます。

4

2 に答える 2

8

の結果を無視してはいけませんReader.read()。ストリームの終わりに達すると-1を返します。そうでない場合は、読み取られた文字の数を返します。あなたがそれを読むように頼んだ文字の数を正確に読むと仮定することは間違っています。

に変更します

while ((read = reader.read(buffer, 0, buffer.length)) != -1) {
    sb.append(buffer, 0, read);
}
于 2013-01-02T21:35:30.907 に答える
5

次を使用してsbオブジェクトを作成する必要があります。

public StringBuilder append(char[] str,
                        int offset,
                        int len)

0のオフセットとreader.readからの戻り値としてのlen

int len = 0;

while ((len = reader.read(buffer,0,buffer.length))!=-1) {
    sb.append(buffer,0,len);
}
于 2013-01-02T21:40:00.647 に答える