java - 关闭套接字也会关闭/刷新输入/输出流

标签 java

我有一个这样的程序,

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

...some read and write here...

socket.close;

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

最佳答案

  1. 关闭套接字不会刷新输出流,而是关闭流和套接字。
  2. 关闭输入流不会刷新输出流,但会关闭流和套接字。
  3. 关闭输出流会刷新它并关闭流和套接字。

您应该关闭包裹在从套接字获取的输出流周围的最外层输出流。例如:

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

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

关闭时刷新记录在 FilterOutputStream 的 Javadoc 中。

关于java - 关闭套接字也会关闭/刷新输入/输出流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19307011/

相关文章:

java - 如何设置 JavaFX TextField 的样式使其看起来像 iOS 的一样?

java - jersey-spring 版本,带有 spring 4.2.5

java - BigDecimal.add() 被忽略

java Long数据类型比较

java - 如何更改日期的 json 字符串并将其格式化为仅显示日期而不显示年、月或时间

Java - 如何在主类中运行 init 方法

java - 保持主要方法运行的最佳方法

java - MethodInvokingFactoryBean-方法未被调用

java - Spring Framework 2.0中如何配置ResourceBundleViewResolver

java - TestNG - configfailurepolicy ="continue"不适用于重试测试