我试图写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;
}
}
答案 0 :(得分:2)
您应该打开和关闭InputStreams
,OutputStreams
,以及其他资源那样的,的尽快强>(在最近的范围内的可能)。例如,如果我想发送文件的步骤
OutputStream
。OutputStream
。如果您不关闭此类资源,您将面临内存泄漏。
您可以使用试用资源,这样您就不会偶然忘记关闭资源。只要实现AutoClosable
接口,您就可以将任何您喜欢的资源与尝试资源一起使用。 (InputStream
和OutputStream
实际上实现了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();
}
注意强>:无论是InputStream
和OutputStream
,是在try-与资源语句,在上述的例子中