如何正确读取CipherInputStream?

时间:2013-11-08 13:40:00

标签: java encryption inputstream

我有一个用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总是等于缓冲区长度(如果文件大于缓冲区)。因此它永远不会结束。这是一个无限循环。

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

提前致谢!

1 个答案:

答案 0 :(得分:1)

read的{​​{1}}方法可以返回InputStream,表示没有读取字节,尽管下一次调用0可能会返回更多字节。你的病情应该反映出来。

read