【问题标题】:does close a socket will also close/flush the input/output stream关闭套接字也会关闭/刷新输入/输出流
【发布时间】:2013-10-10 22:02:42
【问题描述】:

我有一个这样的程序,

Socket socket = serverSocket.accept();
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();

...some read and write here...

socket.close;

代码运行良好。但是如果我关闭套接字,我不确定输入/输出是否关闭。另外我没有调用out.flush(),数据怎么发送出去?

【问题讨论】:

标签: java


【解决方案1】:
  1. 关闭套接字不会刷新输出流,但会同时关闭流和套接字。
  2. 关闭输入流不会刷新输出流,但会同时关闭流和套接字。
  3. 关闭输出流会刷新它并关闭流和套接字。

你应该关闭你从套接字获得的最外层的OutputStream。例如:

BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
DataOutputStream dos = new DataOutputStream(bos);

关闭“dos”。这会刷新它,刷新“bos”,然后关闭所有内容。

Flush on close 记录在 FilterOutputStream 的 Javadoc 中。

【讨论】:

    【解决方案2】:

    另一个答案:In Java, when I call OutputStream.close() do I always need to call OutputStream.flush() before?

    说是的!如果手动关闭它会被刷新

    【讨论】:

    • 也不回答这个问题。你问的是关闭套接字,而不是关闭输出流。
    猜你喜欢
    • 2011-04-26
    • 2018-12-11
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    • 2015-06-18
    • 2012-02-12
    • 1970-01-01
    • 2021-03-09
    相关资源
    最近更新 更多