程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java Socket輸入流如何檢測到EOF

Java Socket輸入流如何檢測到EOF

編輯:關於JAVA

對於InputStream的 read(b, off, len) 方法 public int read(byte[] b, int off, int len) throws IOException,Javadoc的說明為:

If len is zero, then no bytes are read and 0 is returned; otherwise, there is an attempt to read at least one byte. If no byte is available becausethe stream is at end of file, the value -1 is returned; otherwise, at least one byte is read and stored into b.

The default implementation of this method blocks until the requested amount of input data len has been read,end of file is detected, or an exception is thrown.

那麼對於服務端Socket的輸入流來說,什麼是 end of file - EOF?首先說明一點,沒有所謂的標識字符是EOF,對於字節流來說,從0~255的每個字節都是正常的數據,EOF只是輸入流的一種狀態。

當Socket客戶端關閉的時候,服務端輸入流在讀完所有數據之後就會檢測到EOF,然後服務端輸入流返回-1。如果客戶端Socket沒有關閉,並且沒有數據可讀取的情況下,read方法會阻塞,等待有數據可讀。如果設置了SoTimeout,那麼直到超時拋出異常,如果沒有設置超時,那麼會一直等待數據到達。
通過測試,客戶端關閉Socket之後,服務端還可以重復讀取,每次都返回-1。

作者:csdn博客 kingspider-sh

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved