所以用Java创建一个服务器端应用程序。
关于关闭连接,我只是想知道如果我在阅读器之前关闭套接字会发生什么。
例如服务器端
//imports
public static void main(String[] args) {
Socket socket = null;
try {
ServerSocket servsocket = new ServerSocket(8080);
socket = servsocket.accept();
//connection established
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch(Exception e) {
e.printStackTrace();
} finally {
socket.close();
}
}
bufferedreader是否会在套接字关闭的情况下从套接字关闭的输入流周围实例化,或者我的手上是否有潜在的内存泄漏?
答案 0 :(得分:2)
bufferedreader是否会在套接字关闭的情况下围绕输入流实例化,同时关闭套接字
是的,或者更确切地说,它的副作用socket.getInputStream()
将会关闭,BufferedReader
会在下次调用它时注意到它。
或者我手上有潜在的内存泄漏?
没有
但是你要关闭的不是套接字或Reader
,而是你已经缠绕在套接字上的最外面的Writer
或OutputStream
,以确保它被刷新。
关闭套接字的输入或输出流会关闭套接字的另一个流,关闭套接字会关闭两个流。
答案 1 :(得分:-1)
bufferedreader是否会在套接字关闭的情况下围绕输入流实例化,以及套接字关闭,
不,因为缓冲读取器只保存套接字提供的流,所以它不知道该流的状态何时发生变化。
或者我手上有潜在的内存泄漏?
不是因为缓冲区与读者的生命周期有关。即使关闭阅读器导致缓冲区被丢弃,它也需要等待垃圾收集才能用于其他对象。