这个函数在循环中被调用时有时会将null作为outstream而其他时候没有..任何理由?我正在将流出写入文本文件,有时我得到空文本文件。为什么?如果我运行循环20次..我有时会在3个随机场合获得空文本文件,有时4或2个随机场合。我该怎么办?
public void decrypt(InputStream in, OutputStream out) {
try {
// Bytes read from in will be decrypted
in = new CipherInputStream(in, dcipher);
// Read in the decrypted bytes and write the cleartext to out
int numRead = 0;
while ((numRead = in.read(buf)) >= 0) {
out.write(buf, 0, numRead);
}
out.close();
}
catch (java.io.IOException e) {
}
}
答案 0 :(得分:4)
我认为这是因为您正在关闭函数中的输出流。这样,循环的下一次迭代将尝试写入已经关闭的输出流。它将抛出一个IOException
,但你忽略它。尝试在循环之后关闭输出流,而不是在方法中。
InputStream in = null;
OutputStream out = null;
try {
in = Initialize input stream
out = Initialize output stream
for (int i = 0; i < 10; i++) {
decrypt(in, out);
}
}finally {
try {
if (out != null)
out.close();
}finally {
if (in != null)
in.close();
}
}
答案 1 :(得分:3)
你绝对应该修复这部分代码:
catch (java.io.IOException e) {
}
并至少在那里进行一些记录。这样你就会发现为什么会遇到你所描述的问题。
答案 2 :(得分:3)
如果try块中的任何代码抛出异常,则会被忽略(因为catch子句中没有任何内容。
您可能想要:
e.printStackTrace()
)out.close()
调用,在catch块之后的finally
子句中执行它(这样即使出现错误也会发生)答案 3 :(得分:0)
“永远不要关闭你没有打开的东西” - 不知道这是否是一个黄金法则,但是当你关闭子程序中的资源时,它几乎总会导致麻烦 - 下次你需要关闭资源由于您更改了代码,因此它或资源未关闭...