是否可以非常频繁地调用ObjectOutputStream上的reset()?

时间:2014-03-08 03:09:46

标签: java tcp reset outputstream

我读到的地方让我不确定并寻找另一种方式。调用reset()过于频繁会对网络造成压力,还是不必要?

我在ObjectOutputStream上使用TCP发送对象。在再次写入对象值之前,它们会被更改。现在相同的Object但包含不同的值,没有reset()它重新发送在它之前发送的缓存对象的引用,读取后没有任何更改。由于这种压力,我不确定使用reset()是否是一个好主意。我应该寻找另一种方式吗?

示例代码如下:

Socket socket = new Socket(ip, port);

BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
ObjectOutputStream oos = new ObjectOutputStream(bos);

while(true){
    oos.writeObject(object);
    oos.flush();
    oos.reset();

    object.x++;
}

1 个答案:

答案 0 :(得分:4)

  

调用reset()过于频繁会导致网络压力

相比什么?如果需要重置,那是因为您需要使用新值传输先前传输的对象。如果您不需要这样做,请不要调用它。如果确实需要这样做,网络开销与功能要求无关。

  

还是不必要的?

嗯?请翻译?

  

我在ObjectOutputStream上使用TCP发送对象。在再次写入之前,对象值会发生变化

因此您需要调用reset()或使用writeUnshared()。

  

现在是相同的Object,但包含不同的值,没有reset(),它会重新发送在它之前发送的缓存对象的引用,读取后没有任何更改。

正确。所以你不能这样做。

  

由于这种压力,我不确定使用reset()是否是一个好主意。

什么压力?唯一的“压力”是你传递物体的新价值,而你的功能要求决定了你必须这样做。所以你没有选择。

  

我应该寻找其他方式吗?

没有别的办法。要么必须传输对象的新值,要么不传输。如果这样做,所有解决方案都基本相同。如果不这样做,请不要。