当前位置: 首页 > 知识库问答 >
问题:

我需要关闭套接字的读取器吗?

越嘉茂
2023-03-14

所以在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个答案

辛渝
2023-03-14

在套接字的输入流周围实例化的bufferedreader是否会随着套接字的关闭而关闭,

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

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

不太可能,因为缓冲区与读取器的生命周期有关。即使关闭读卡器导致缓冲区被释放,它也需要等待垃圾收集对其他对象可用。

狄河
2023-03-14

围绕套接字中的输入流实例化的bufferedreader会随着套接字的关闭而关闭吗

是的,或者更确切地说,它的底层socket.getInputStream()将关闭,下次调用它时,BufferedReader将注意到这一点。

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

但是,您应该关闭的不是套接字或读取器,而是围绕套接字的最外层WriterOutputStream,以确保它被刷新。

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

 类似资料:
  • 我在我的应用程序中保存了和的一个实例,每次我想执行一些操作时,我都会调用。 我想知道我是否需要显式关闭连接,就像JDBC中的一样。 要强调的是,我只有一个实例。我的问题不是关于关闭,而是关闭我相信它在调用时打开的连接。

  • 问题内容: 我想知道,在关闭阅读器之后,是否需要关闭InputStream? 问题答案: 不,您不必。 由于Java中用于流的装饰器方法可以通过将新流或读取器附加到其他流上来构建新流或读取器,因此实现将自动对其进行处理。 如果查看其来源,则会看到: 因此,关闭操作实际上关闭了底层的流读取器。 编辑:我想确保关闭也可以在输入流上工作,请继续关注。 签入 在调用sd的close时调用。

  • 问题内容: 我有一个网站,它的点击率很高,我遇到了问题,JDCB连接错误。 我对关闭有点困惑,我需要关闭还是仅关闭就足够了。 另外,我需要关闭它吗? 问题答案: 是的,您必须关闭PreparedStatement和结果集,因为它们可能导致内存泄漏。有关更多信息,请访问 http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

  • 我最近试图在我的Ubuntu网络服务器[1]上使用PHP函数proc_open二进制文件进行通信。我可以建立连接并定义管道STDIN、STDOUT和STDERR。不错。 现在,我正在谈论的是一个交互式计算机代数软件-因此,我希望在第一个命令后保持STDOUT和STDIN都处于活动状态,以便我可以在几行之后以交互式方式使用该应用程序(从web前端直接用户输入)。 然而,事实证明,读取二进制文件(st

  • 问题内容: 假定以下代码,其中“ sock”是TCP套接字的句柄,该句柄先前已使用epfd指定的epoll文件描述符注册。 如果套接字无论如何都要随后关闭,是否仍然需要调用epoll_ctl?还是由于关闭套接字而隐式注销了套接字? 问题答案: 从手册页: Q6 关闭文件描述符会导致它自动从所有epoll集中删除吗? A6 是,但是请注意以下几点。文件描述符是对打开的文件描述的引用(请参阅(2))。

  • 我有一个网站,点击量很大。我遇到过一些问题,包括JDBC连接错误。 我对结束PreparedStatement有点困惑。我需要关闭PreparedStatement吗?还是只需要关闭语句就足够了? 另外,呢?我也需要关闭它吗?