0

n個のファイルをマージして単一のファイルにしようとしています。しかし、関数で奇妙な動作が発生しました。関数はn秒間にx回呼び出されます。マージするファイルが 100 個あるとします。毎秒 5 つのファイルを呼び出してマージします。次の 1 秒で量は 2 倍の 10 になりますが、1 ~ 5 は前と同じファイルで、残りは新しいファイルです。それは正常に動作しますが、ある時点でゼロバイトになるか、適切なサイズになります。

以下の関数の間違いを見つけるのを手伝ってくれませんか?

public void mergeFile(list<String> fileList, int x) {
    int count = 0;
    BufferedOutputStream out = null;
    try {
        out = new BufferedOutputStream(new FileOutputStream("Test.doc"));
        for (String file : fileList) {
            InputStream in = new BufferedInputStream(new FileInputStream(file));
            byte[] buff = new byte[1024];
            in.read(buff);
            out.write(buff);
            in.close();
            count++;
            if (count == x) {
                break;
            }
        }
        out.flush();
        out.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

*私の英語でごめんなさい

4

2 に答える 2

1

in.read(バフ);

Javadocを確認してください。そのメソッドは、バッファーを満たすことが保証されていません。読み取ったバイト数を示す値を返します。それを使用することになっています。この状況では、書き込むバイト数を決定するときに使用することになっています。

于 2012-07-13T10:29:06.490 に答える