Недавно я создал оболочку для чтения и записи данных в массив byte
. Чтобы сделать это, я был используя ArrayList<Byte>
, но мне было интересно, если это самое ЭФФЕКТИВНЫЙ способ сделать это, потому что:Java - ByteBuffer или ArrayList <Byte>?
addAll()
не работает сbyte
массивами (даже с использованиемArrays.asList()
, которая возвращает яList<Byte[]>
). Чтобы исправить это, я просто зацикливаюсь и добавляюbyte
в каждом цикле, но я предполагаю, что это предполагает множество вызовов функций, и поэтому у него есть стоимость исполнения.- То же самое происходит при получении
byte[]
отArrayList
. Я не могу отличить отByte[]
доbyte[]
, поэтому я должен использовать для этого цикл. - Я полагаю, что хранение байта вместо байта использует больше памяти.
Я знаю ByteArrayInputStream
и ByteArrayOutputStream
может быть использован для этого, но она имеет некоторые inconvenients:
- Я хотел реализовать методы для чтения различных типов данных в другом порядке байт (например,
readInt
,readLEInt
,readUInt
и т. Д.), Тогда как эти классы могут читать или записывать байт или массив байтов. Это не проблема, потому что я могу исправить это в обертке. Но здесь возникает вторая проблема. - Я хотел иметь возможность писать и читать одновременно, потому что я использую это для распаковки некоторых файлов. И поэтому для создания обертки для этого мне нужно будет включить как
ByteArrayInputStream
, так иByteArrayOutputStream
. Я не знаю, могли ли они быть синхронизированы каким-либо образом, или мне пришлось бы писать все данные одного из них каждый раз, когда я писал обертке.
И вот, вот мой вопрос: будет ли использование ByteBuffer
более эффективным? Я знаю, что вы можете взять integers
, floats
и т. Д., Даже будучи в состоянии изменить порядок байтов. Мне было интересно, есть ли реальное изменение производительности между использованием ByteBuffer
и ArrayList<Byte>
.
'ArrayList' не кажется хорошей идеей. –
biziclop
Если вам нужен буфер с динамическим размером, посмотрите на мой комментарий, используйте ByteArrayOutputStream, расширьте его и используйте файлы buf и count, чтобы сделать некоторые быстрые методы чтения. Он имеет приключения, что он имеет динамический размер; –