Java socket中关闭IO流后,发生啥事

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java socket中关闭IO流后,发生啥事相关的知识,希望对你有一定的参考价值。

  为了方便讲解,我们把DataOutputstream dout = new DataOutputStream(new BufferedOutputStream(mySocket.getOutputStream()));中的dout做为Socket输出流的代言。同 样的,din是输入流的代言。
  可以造成dout被关闭的操作有:
  1、调用dout.close();或din.close();因为使用这种流关闭,会造成socket被关闭,所以输入输出流都将不可再用。
  2、调用socket.close();
  3、调用socket.shutdownOutputStream();单方面关闭dout,此时din还可正常使用。
  
  以下,我将对socket中关闭输出流进行3个测试:
  输出流关闭测试一:socket关闭吗?
输出流关闭测试二:该流是否可以重新开启?
输出流关闭测试三:输出缓冲区里的数据是丢弃,还是发送?
  测试结果如下:
  测试一:dout.close();会造成socket被关闭,但socket.shutdownOutputStream()不会。
  测试二:不可以,会抛出异常!
  测试三:丢弃

  转载
参考技术A 应该是链接断开

java中的io流都有哪些

参考技术A Java中的IO流
指的是将不同的输入输出源通过流的形式进行输入或输出的操作,流是一种抽象的描述,在程序中指的是数据的一种转移方式。
IO流的分类:
(1)按照数据的流向:
输入流、输出流
(2)按照流数据的格式:
字符流、字节流
(3)按照流数据的包装过程:
节点流(低级流)、处理流(高级流)
最基本的几种进行简单介绍:
•InputStream/Reader: 所有的输入流的基类,前者是字节输入流,后者是字符输入流。
•OutputStream/Writer: 所有输出流的基类,前者是字节输出流,后者是字符输出流。

以上是关于Java socket中关闭IO流后,发生啥事的主要内容,如果未能解决你的问题,请参考以下文章

如何在 socket.io 1.0 中关闭服务器?

如何在 gradle 启动测试中关闭关闭挂钩的输出?

为什么我们应该在JDBC中关闭连接?如果我们不这样做,会发生什么

我是不是需要在 Java 中关闭 IO 流? [复制]

java中关闭窗口的方法

如何在java中关闭当前工作目录(不是完整路径)[关闭]