什么时候(多久一次)打开/关闭输入/输出流?

时间:2019-02-02 08:44:06

标签: java inputstream outputstream

我试图写FTP客户端程序与我有输入和输出流,以服务器和我的计算机之间传输文件

当我在考虑如何设计类时,我无法决定每次调用该函数然后立即关闭它都将打开一个新的InputStream(如下例所示)。

或者只是在构造函数中执行此操作,然后在退出程序时将其关闭。有关系吗?这样做是否有意义,特别是如果用户可以选择在执行一次后立即将另一个文件上传到服务器,则可以选择吗?

public class FTPClientP extends FTP{
    private InputStream is;

    public FTPC(String serverAdd, int connection_port){
        is = null;

    }
    public int connectToServer() throws  IOException{

    }

    public boolean uploadToServer(File file) throws IOException{

        boolean uploaded = false;

        is = new FileInputStream(file);

        String fileName = myFile.getName();

        uploaded = ftp.storeFile(fileName, is);

        is.close();

        return uploaded;
    }

}

1 个答案:

答案 0 :(得分:2)

您应该打开和关闭InputStreamsOutputStreams,以及其他资源那样的,的尽快(在最近的范围内的可能)。例如,如果我想发送文件的步骤

  1. 打开一个OutputStream
  2. 发送字节。
  3. 关闭OutputStream

如果您不关闭此类资源,您将面临内存泄漏

您可以使用试用资源,这样您就不会偶然忘记关闭资源。只要实现AutoClosable接口,您就可以将任何您喜欢的资源与尝试资源一起使用。 (InputStreamOutputStream实际上实现了AutoClosable接口)。

使用try-与资源的示例:

try (InputStream fis = new FileInputStream(source);
        OutputStream fos = new FileOutputStream(target)){

        byte[] buf = new byte[8192];

        int i;
        while ((i = fis.read(buf)) != -1) {
            fos.write(buf, 0, i);
        }
    }
    catch (Exception e) {
        e.printStackTrace();
    }

注意:无论是InputStreamOutputStream,是在try-与资源语句,在上述的例子中