我有一个用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
总是等于缓冲区长度(如果文件大于缓冲区)。因此它永远不会结束。这是一个无限循环。
我认为问题在于我检测输入流的结束。 我应该如何正确地将一个流复制到另一个流?
提前致谢!
答案 0 :(得分:1)
read
的{{1}}方法可以返回InputStream
,表示没有读取字节,尽管下一次调用0
可能会返回更多字节。你的病情应该反映出来。
read