我需要关闭插座的读卡器吗?

时间:2017-06-01 22:54:28

标签: java sockets input reader

所以用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是否会在套接字关闭的情况下从套接字关闭的输入流周围实例化,或者我的手上是否有潜在的内存泄漏?

2 个答案:

答案 0 :(得分:2)

  

bufferedreader是否会在套接字关闭的情况下围绕输入流实例化,同时关闭套接字

是的,或者更确切地说,它的副作用socket.getInputStream()将会关闭,BufferedReader会在下次调用它时注意到它。

  

或者我手上有潜在的内存泄漏?

没有

但是你要关闭的不是套接字或Reader,而是你已经缠绕在套接字上的最外面的WriterOutputStream,以确保它被刷新。

关闭套接字的输入或输出流会关闭套接字的另一个流,关闭套接字会关闭两个流。

答案 1 :(得分:-1)

  

bufferedreader是否会在套接字关闭的情况下围绕输入流实例化,以及套接字关闭,

不,因为缓冲读取器只保存套接字提供的流,所以它不知道该流的状态何时发生变化。

  

或者我手上有潜在的内存泄漏?

不是因为缓冲区与读者的生命周期有关。即使关闭阅读器导致缓冲区被丢弃,它也需要等待垃圾收集才能用于其他对象。