2013-10-10 71 views
0

我有一個這樣的程序,確實關閉套接字也將關閉/刷新輸入/輸出流

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

...some read and write here... 

socket.close; 

的代碼工作正常。但是我不確定如果關閉套接字,輸入/輸出是否接近。我也沒有叫out.flush(),數據如何發送出去?

+1

請參閱http://stackoverflow.com/questions/3428127/what-is-the-difference-between-closing-input-outputstream-and-closing-socket-dir – zjor

+0

看起來像關閉套接字將關閉輸入/輸出流與此套接字關聯。但是outputStream會變成flush嗎? –

回答

2
  1. 關閉套接字不刷新輸出流,但關閉流和套接字。
  2. 關閉輸入流不會刷新輸出流,但會關閉流和套接字。
  3. 關閉輸出流將刷新它並關閉流和套接字。

你應該關閉最外層的OutputStream,你已經從套接字中獲得了一個。例如:

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

關閉'dos'。沖洗它,刷新'bos',並關閉所有東西。

Flush on close記錄在FilterOutputStream的Javadoc中。