0

我有一个这样的程序,

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

...some read and write here...

socket.close;

代码工作正常。但是如果我关闭套接字,我不确定输入/输出是否关闭。另外我没有调用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 回答
1

另一个答案:在 Java 中,当我调用 OutputStream.close() 时,我是否总是需要先调用 OutputStream.flush()?

说是的!如果您手动关闭它,它将被刷新

于 2013-10-10T22:17:05.700 回答