应如何关闭InputStream和OutputStream?

时间:2010-11-05 17:07:13

标签: android inputstream outputstream

我正在使用以下代码从连接到服务器关闭InputStream和OutputStream:

try {
        if (mInputStream != null) {
            mInputStream.close();
            mInputStream = null;
        }

        if (mOutputStream != null) {
            mOutputStream.close();
            mOutputStream = null;
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

然而,溪流没有关闭,它们仍然活着。如果我再次连接,则有两个不同的InputStream。 catch部分没有例外。

我做错了什么?

1 个答案:

答案 0 :(得分:18)

您发布的代码有两个问题:

  1. 应该在finally块中处理.close()调用。通过这种方式,它们总是会被关闭,即使它在沿途的某个地方落入了一个挡块。
  2. 你需要在自己的try / catch块中处理EACH .close()调用,否则你可能会让其中一个被搁置。如果您尝试关闭输入流失败,则会跳过关闭输出流的尝试。
  3. 你想要更像这样的东西:

        InputStream mInputStream = null;
        OutputStream mOutputStream = null;
        try {
            mInputStream = new FileInputStream("\\Path\\MyFileName1.txt");
            mOutputStream = new FileOutputStream("\\Path\\MyFileName2.txt");
            //... do stuff to your streams
        }
        catch(FileNotFoundException fnex) {
            //Handle the error... but the streams are still open!
        }
        finally {
            //close input
            if (mInputStream != null) {
                try {
                    mInputStream.close();
                }
                catch(IOException ioex) {
                    //Very bad things just happened... handle it
                }
            }
            //Close output
            if (mOutputStream != null) {
                try {
                    mOutputStream.close();
                }
                catch(IOException ioex) {
                    //Very bad things just happened... handle it
                }
            }
        }