什么更快?合并字节数组还是单独发送?

时间:2018-12-30 10:41:30

标签: java arrays sockets packet

一个大数组还是200个小数组?

我有一些对象,它们用某种代码魔术转换成字节数组,然后通过DataOutputStream通过Socket发送。但是,我应该为每个对象分别发送这些数组还是将它们合并为一个数组,然后在客户端“提取”?

数组的最大长度为48个字节,但是如果我有200个对象,这意味着我总共有200个(每个48个字节)要通过网络发送的字节数组,将它们合并成一个数组更快巨大的数组(9600字节)并发送一次?


当前解决方案

目前,我正在为每个对象一个一发送。要使它们合并然后在收到时提取它们是一项艰巨的任务,因此我宁愿先请专业人员进行操作。


如果同一问题重复,那么对不起,我只是无法将我的想法写成文字来搜索它们。不是说英语。

1 个答案:

答案 0 :(得分:1)

没有理由将多个数组合并为一个。实际上,您目前正在执行的一种模式称为散布式聚集(scatter-gather),它稍微复杂一些,但实质上是关于将数据流读取到多个缓冲区中,以及从多个缓冲区(数组)写入数据流。

将它们合并在一起实际上并不需要花费很多时间来处理您要处理的数据量,但是似乎没有必要。如果您担心可伸缩性,可以看看NIO,它提供了一个SocketChannel(实现GatheringByteChannel),您可以在一个调用中从多个缓冲区向其写入数据。

https://docs.oracle.com/javase/8/docs/api/java/nio/channels/SocketChannel.html#write-java.nio.ByteBuffer:A-