0

Java 入力ストリームからの読み取りに問題があります。サイズが 1024 のバッファーと、サイズが 29k ~ 31k の入力ストリームがあります。ループで inputStream を読み取りましたが、最初の読み取りでは 29 バイトしか取得できず、2 回目の読み取りでは 39 バイトしか取得できず、その後は何も取得されません。異なる InputStream に対して同じ動作が繰り返されます。(データを出力ストリームに書き込んでいますが、これが最初の読み取りにどのように影響するかわかりません)

        int bytesRead = 0;
        byte[] byteBuf = new byte[1024];

        OutputStream fileStream = FileUtil.openFileForWrite(saveTo);

        bytesRead = reader.read(byteBuf);
        while(bytesRead!=-1){
            fileStream.write(byteBuf, 0, bytesRead);
            bytesRead = reader.read(byteBuf);
        }

私は何が欠けていますか?

どんな助けでも大歓迎です:)

4

2 に答える 2

1

入力ストリームはどこから取得していますか? それが 29K-31K であることをどのように知っていますか?

あなたのコードは合理的に見えますが、通常、read呼び出しの重複を避けるためにループを少し異なる構造にしています。

于 2009-08-09T15:53:05.013 に答える
0

read() の代わりに readline() を使ってみましたか?

Path file = ...;
InputStream in = null;
try {
    in = file.newInputStream();
    BufferedReader reader = new BufferedReader(new InputStreamReader(in));
    String line = null;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }
} catch (IOException x) {
    System.err.println(x);
} finally {
    if (in != null) in.close();
}
于 2009-08-09T15:53:34.843 に答える