什么更快?合并字节数组还是分开发送?

What's faster? Merge byte arrays or send separately?

一个大阵还是200个小阵?

我有一些对象,我使用一些代码魔法将其转换为字节数组,然后通过 DataOutputStream 发送这些对象到 Socket。但是,我应该为每个对象单独发送这些数组,还是将它们合并到一个数组中,然后 "extract" 在客户端发送?

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


当前解决方案

目前,我正在为每个对象一个一个地发送。合并然后在收到时提取是一项艰巨的工作,所以我宁愿在做之前请教专业人士。


如果有重复的同一个问题,那么抱歉,我无法将我的想法转化为文字来搜索它们。母语不是英语。

没有理由将多个数组合并为一个。实际上,您当前正在做的事情有一种模式,称为分散-聚集,它稍微复杂一些,但本质上是关于将数据流读入多个缓冲区,并从多个缓冲区(数组)写入数据流。

将它们合并在一起对于您正在处理的数据量来说应该不会花费太多时间,但似乎没有必要。如果您担心可伸缩性,可以看看 NIO,它提供了一个 SocketChannel(它实现了 GatheringByteChannel),您可以在一次调用中从多个缓冲区写入。

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