为什么在刚创建输出缓冲区时需要刷新它?

kry*_*tah 6 java io flush

在以下场景中

ObjectOutputStream output = new ObjectOutputStream(socket.getOutputStream());
output.flush();
// Do stuff with it
Run Code Online (Sandbox Code Playgroud)

为什么始终需要在初始创建后刷新缓冲区?
我一直都看到这一点,我真的不明白必须要冲洗什么.除非另有说明,否则我希望新创建的变量为空.

有点像买垃圾桶,在里面找到一堆垃圾.

Fer*_*big 3

ObjectInputStream使用和时需要这样做ObjectOutputStream,因为它们在调用第一次写入之前通过流发送标头。调用flush()将将该标头发送到远程端。

根据规范,标头存在以下内容:

magic version
Run Code Online (Sandbox Code Playgroud)

如果在构建 ObjectInputStream 时标头未到达,则此调用将挂起,直到收到标头字节。

这意味着如果相关协议是用ObjectStreams 编写的,则它应该在创建ObjectOutputStream.

ObjectOutputStream请注意,只有在使用发送到实时查看器时才需要这种做法。如果将其写入文件,通常不需要