问题1:API中 shutdownInput的解释是“此套接字的输入流置于流的末尾”,但是不懂这句话是什么意思?什么时候要用到这个方法? 真心的求教,弄这个问题烦了好久了。至100分的谢意! |
|
虽然在大多数的时候可以直接使用Socket类或输入输出流的close方法关闭网络连接,但有时我们只希望关闭OutputStream或InputStream,而在关闭输入输出流的同时,并不关闭网络连接。这就需要用到Socket类的另外两个方法:shutdownInput和shutdownOutput,这两个方法只关闭相应的输入、输出流,而它们并没有同时关闭网络连接的功能。
|
|
那这一句:“此套接字的输入流置于流的末尾”,是什么意思?
|
|
20分 |
就是说流已经读到了末尾,再没有数据可以读了,和你自己读到流末尾是相同效果,但这个方法还会将以后发过来的数据忽略掉。 |
流和Socket只有在你确定以后不再会用到时才会去close,你下次还要用当然不能close,否则你就只能重新连接了。
|
|
20分 |
虽然在大多数的时候可以直接使用Socket类或输入输出流的close方法关闭网络连接,但有时我们只希望关闭OutputStream或InputStream,而在关闭输入输出流的同时,并不关闭网络连接。这就需要用到Socket类的另外两个方法:shutdownInput和shutdownOutput,这两个方法只关闭相应的输入、输出流,而它们并没有同时关闭网络连接的功能。和isClosed、isConnected方法一样,Socket类也提供了两个方法来判断Socket对象的输入、输出流是否被关闭,这两个方法是isInputShutdown()和isOutputShutdown()。下面的代码演示了只关闭输入、输出流的过程:
package mysocket; import java.net.*; public class MyCloseConnection1 { public static void printState(Socket socket) { System.out.println("isInputShutdown:" + socket.isInputShutdown()); System.out.println("isOutputShutdown:" + socket.isOutputShutdown()); System.out.println("isClosed:" + socket.isClosed()); System.out.println(); } public static void main(String[] args) throws Exception { Socket socket = new Socket("www.ptpress.com.cn", 80); printState(socket); socket.shutdownInput(); printState(socket); socket.shutdownOutput(); printState(socket); } } 在运行上面的代后,将得到如下的输出结果: isInputShutdown:false isOutputShutdown:false isClosed:false isInputShutdown:true isOutputShutdown:false isClosed:false isInputShutdown:true isOutputShutdown:true isClosed:false 从输出结果可以看出,isClosed方法一直返回false,因此,可以肯定,shutdownInput和shutdownOutput并不影响Socket对象的状态。 |