0

我有一个使用 CipherOutputStream 加密的文件(使用 AES 密钥)。加密工作完美。现在我想解密这个文件并保存为另一个文件。我正在使用两个流来做到这一点。使用适当的密钥数据从 FileInputStream 初始化 CipherInputStream,从文件名初始化 FileOutputStream。我使用这种方法来复制文件:

private static void copyStreams(InputStream is, OutputStream os) throws IOException {
    byte[] buffer = new byte[1024 * 10];
    int length;
    while ((length = is.read(buffer)) > 0) {
        os.write(buffer, 0, length);
    }
}

问题:length总是等于缓冲区长度(如果文件大于缓冲区)。因此它永远不会结束。这是一个无限循环。

我认为问题在于我检测输入流结束的方式。我应该如何正确地将一个流复制到另一个流?

提前致谢!

4

1 回答 1

1

can 返回的read方法表明没有读取任何字节,尽管下一次调用可能会返回更多字节。你的情况应该反映这一点。InputStream0read

while ((length = is.read(buffer)) >= 0) {
        os.write(buffer, 0, length);
}
于 2014-10-21T03:15:04.073 回答