在Java中使用对象数据流或原始数据流是否更有效?

时间:2011-01-15 20:53:23

标签: java object io stream

在Java中执行I / O操作时,使用像ObjectInputStream这样的对象数据流通常更有效(在计算资源方面),或者使用像{{{{{}这样的原始数据流更有效率1}}?

如果使用对象数据流更有效,当我们考虑与创建对象相关的开销(尽可能最小)时,对象数据流是否仍然更有效?

5 个答案:

答案 0 :(得分:4)

如果操作正确,自定义序列化可以节省空间/带宽和CPU时间。

我建议您查看google的Protocol Buffers - 非常高效且便携的序列化库。

答案 1 :(得分:3)

根据流中实际存在的数据类型选择对象或数据输入流。如果它是Java对象使用对象流,如果它不是DataInputStream(或其他适当的)。

那么您的流中有哪些数据?

答案 2 :(得分:2)

ObjectInputStream将更易于使用。在尝试使用DataInputStream之前,我会检查它是否足够快。 DataInputStream不如使用NIO / ByteBuffer那么高效,但是相对较小的改进会增加工作量。

答案 3 :(得分:2)

对象序列化/ desirialization是java中较重的东西之一。因此,如果这是程序的性能关键部分,那么避免对象序列化可能会有所帮助。虽然在许多情况下瓶颈存在于其他地方,但您最终可能会过早优化。所以恕我直言,如果您不确定这将成为一个瓶颈,请使用ObjectInputStream并稍后进行优化。

答案 4 :(得分:1)

为什么你不写一些你想要的东西,在它周围进行一些测试,这样你就知道它有效。然后,如果它成为一个问题,你将能够更快地替换实现,没有大惊小怪。如果事实证明这不是问题,那么大多数事情都会变成......那么你就不会花时间去做一些不必要的事情,而且你也不会过早地进行优化。

Xstream非常方便点燃这种东西,并且非常易于使用。

如果您的架构不是过于繁琐,您可能永远不需要优化这一点。