0

そんな番組もあるし、

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

...some read and write here...

socket.close;

コードは正常に動作します。しかし、ソケットを閉じた場合、in/out が閉じていたかどうかはわかりません。また、out.flush() を呼び出さなかったのですが、データはどのように送信されるのでしょうか?

4

2 に答える 2

2
  1. ソケットを閉じても、出力ストリームはフラッシュされませんが、ストリームとソケットの両方が閉じられます。
  2. 入力ストリームを閉じても、出力ストリームはフラッシュされませんが、ストリームとソケットの両方が閉じられます。
  3. 出力ストリームを閉じると、それがフラッシュされ、ストリームとソケットの両方が閉じられます。

ソケットから取得したものをラップした最も外側の OutputStream を閉じる必要があります。例えば:

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

「dos」を閉じます。それはそれをフラッシュし、「bos」をフラッシュし、すべてを閉じます。

クローズ時のフラッシュは、FilterOutputStream の Javadoc に記載されています。

于 2013-10-10T22:56:22.877 に答える