Java 为什么此函数返回null outstream
在循环中调用此函数时,有时会将null作为outstream,而有时则不会。。有什么原因吗?我正在将扩展流写入文本文件,有时会得到空文本文件。为什么?如果我运行循环20次。。我有时会在3个随机场合,有时4或2个随机场合得到空文本文件。我该怎么办Java 为什么此函数返回null outstream,java,Java,在循环中调用此函数时,有时会将null作为outstream,而有时则不会。。有什么原因吗?我正在将扩展流写入文本文件,有时会得到空文本文件。为什么?如果我运行循环20次。。我有时会在3个随机场合,有时4或2个随机场合得到空文本文件。我该怎么办 public void decrypt(InputStream in, OutputStream out) { try { // Bytes read from in will be decrypted in = new Cipher
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) {
}
}
我认为这是因为您正在关闭函数中的输出流。这样,循环的下一次迭代将尝试写入已关闭的输出流。它将抛出一个
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();
}
}
InputStream in=null;
OutputStream out=null;
试一试{
in=初始化输入流
out=初始化输出流
对于(int i=0;i<10;i++){
解密(输入、输出);
}
}最后{
试一试{
if(out!=null)
out.close();
}最后{
if(in!=null)
in.close();
}
}
我认为发生这种情况是因为您正在关闭函数中的输出流。这样,循环的下一次迭代将尝试写入已关闭的输出流。它将抛出一个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();
}
}
InputStream in=null;
OutputStream out=null;
试一试{
in=初始化输入流
out=初始化输出流
对于(int i=0;i<10;i++){
解密(输入、输出);
}
}最后{
试一试{
if(out!=null)
out.close();
}最后{
if(in!=null)
in.close();
}
}
“永远不要关闭您尚未打开的资源”-不知道这是否是一条黄金法则,但当您关闭子例程中的资源时,它几乎总是会导致问题-或者在下次需要时关闭资源,或者由于您更改了代码而未关闭资源…“永远不要关闭您尚未打开的资源”-不知道这是否是一条金科玉律,但当您关闭子例程中的资源时,它几乎总是会导致麻烦-要么下次需要时关闭资源,要么因为更改了代码而未关闭资源…您肯定应该修复代码的这一部分:
catch (java.io.IOException e) {
}
至少在那里做一些记录。这样,您就可以找到出现所述问题的原因。您肯定应该修复代码的这一部分:
catch (java.io.IOException e) {
}
至少在那里做一些记录。通过这种方式,您将发现出现所述问题的原因。如果try块中的任何代码引发异常,它将被忽略(因为catch子句中没有任何内容) 您可能希望:
- 在catch子句中实际执行一些操作(至少打印异常消息-尝试
)e.printStackTrace()
- 不要在try块中调用
,而是在catch块后的out.close()
子句中调用(这样即使出现错误也会发生)finally
- 另外,正如bruno所指出的,如果每次调用decrypt时都重复使用同一个输出流,那么不应该在函数内部关闭它,但是可能需要在循环内部刷新()它
- 在catch子句中实际执行一些操作(至少打印异常消息-尝试
)e.printStackTrace()
- 不要在try块中调用
,而是在catch块后的out.close()
子句中调用(这样即使出现错误也会发生)finally
- 另外,正如bruno所指出的,如果每次调用decrypt时都重复使用同一个输出流,那么不应该在函数内部关闭它,但是可能需要在循环内部刷新()它