声明:该博文以socket中,关闭输出流为例进行说明。
为了方便讲解,我们把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()不会。
测试二:不可以,会抛出异常!
测试三:丢弃
客户端程序:
package com.test2;
import java.io.*;
import java.net.*;
/**
* @ClassName:

本文探讨了在Java中关闭Socket的输出流时的各种情况,包括关闭操作是否影响Socket本身,流是否能重新开启,以及关闭后输出缓冲区的数据如何处理。测试结果显示,关闭输出流(dout.close())会导致Socket关闭,而shutdownOutputStream()不会;关闭后的流无法重新开启,会抛出异常;未发送的缓冲区数据会被丢弃。
最低0.47元/天 解锁文章
501

被折叠的 条评论
为什么被折叠?



