Что быстрее?Объединить байтовые массивы или отправить отдельно? - PullRequest
0 голосов
/ 30 декабря 2018

Один большой массив или 200 маленьких?

У меня есть объекты, которые я превращаю в массивы байтов с некоторой магией кода, а затем отправляю их через DataOutputStream через Socket.Но стоит ли отправлять эти массивы отдельно для каждого объекта или объединять их в один массив, а затем «извлекать» его на стороне клиента?

Максимальное количество массивов - 48 байтов, но если у меня 200 объектов, это означает, что у меня есть 200 (по 48 байтов каждый) массивов байтов для отправки по сети, быстрее ли объединятьих в один огромный массив (9600 байт) и отправить его один раз?


Текущее решение

В настоящее время я отправляю их по одному для каждого объекта.Заставить их объединиться, а затем извлечь, когда получено, - большая работа, поэтому я лучше спросить у профессионалов, прежде чем делать это.


Если есть дубликат того же вопроса, тогда извините, я просто не могувложите мои идеи в слова, чтобы найти их.Не говорит по-английски.

1 Ответ

0 голосов
/ 30 декабря 2018

Нет причин объединять несколько массивов в один.На самом деле есть шаблон для того, что вы в настоящее время делаете, называемый scatter-collect, который немного более сложный, но по сути это чтение потока данных в несколько буферов и запись в поток данных из нескольких буферов (массивов).

Объединение их вместе не должно занимать много времени для томов данных, с которыми вы имеете дело, но кажется ненужным.Если вы беспокоитесь о масштабируемости, возможно, обратите внимание на NIO, который предоставляет SocketChannel (который реализует GatheringByteChannel), в который вы можете записывать из нескольких буферов за один вызов.

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

...