Какова скорость передачи в байтах / секундах вашего устройства?Если его размер меньше 1 МБ в секунду, вероятно, не имеет значения, какой подход вы используете.
Если вы пишете байты, почему бы не использовать ConcurrentLinkedQueue<Byte>
Все возможные значения байтов кэшируются, поэтомутолько условные затраты на автоматическую упаковку и распаковку.
Основная горловина производительности - это связанные записи в очереди.Каждый байт по-прежнему создает объект (который является узлом в списке), и каждый объект использует около 16 байтов.Другими словами, вы можете увеличить byte[]
16x, и он будет использовать тот же объем памяти и создавать меньше мусора.
Чтобы удовлетворить ваши требования, вы можете использовать ConcurrentLinkedQueue<Byte>
, но создать кольцевой буфер дляbyte[]
будет быстрее (и его легко будет изменить размер)
Если вы отправляете более 10 МБ / с, я бы предложил написать ByteBuffer и обменяться с другим потоком (то есть, чтобы вы передавали большие блокиодновременно)