我有一个使用 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
总是等于缓冲区长度(如果文件大于缓冲区)。因此它永远不会结束。这是一个无限循环。
我认为问题在于我检测输入流结束的方式。我应该如何正确地将一个流复制到另一个流?
提前致谢!