【发布时间】:2013-11-08 13:39:59
【问题描述】:
我有一个使用 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 总是等于缓冲区长度(如果文件大于缓冲区)。因此它永远不会结束。这是一个无限循环。
我认为问题在于我检测输入流结束的方式。 我应该如何正确地将一个流复制到另一个流?
提前致谢!
【问题讨论】:
-
这对我来说很好 - 你确定它真的 always 返回一个大数字吗?我希望它可以根据需要循环多次,然后停止。你能发布一个简短但完整的程序来演示这个问题吗?
-
非常感谢。我发现了问题。问题出在我身上,而不是上面的代码。我在一个非常慢的文件系统(一个较旧的 Android 平板电脑)上运行它,因此它花费了非常多的时间。出于这个原因,我认为它会无限运行。现在我将缓冲区大小增加到 10MBytes,它现在已经足够快了。我不知道,我应该要求版主删除我的问题吗?感觉自己很蠢。
-
@ÁronNemmondommegavezetéknevem 您可以删除自己的问题,因为它没有答案。如果问题 (a) 有多个答案,或 (b) 有一个答案得分为正,您将无法删除问题。见meta.stackexchange.com/questions/5221/…
标签: java encryption inputstream