Существует несколько способов работы с байтами.И я согласен, что не всегда легко выбрать лучший:
-
byte[]
java.nio.ByteBuffer
java.io.ByteArrayOutputStream
(в комбинациис другими потоками) java.util.BitSet
byte[]
- это просто примитивный массив, просто содержащий необработанные данные.Таким образом, у него нет удобных методов для создания или управления контентом.
A ByteBuffer
больше похож на компоновщик. Он создает byte[]
.В отличие от массивов, он имеет более удобные вспомогательные методы.(например, метод append(byte)
).Это не так просто с точки зрения использования . (Большинство уроков слишком сложны или некачественны, но этот один куда-то вас приведет. Сделайте еще один шаг? Затем прочитайте о многих подводных камнях .)
Вы можете испытать искушение сказать, что ByteBuffer
делает с byte[]
, что StringBuilder
делает с String
.Но есть определенная разница / недостаток класса ByteBuffer
.Как и в случае с массивами, ByteBuffer
имеет фиксированный размер. Итак, когда вы создаете его экземпляр, вы уже должны указать размер буфера.
Это одна из причин, по которой Я часто предпочитаю использовать ByteArrayOutputStream
, потому что он автоматически изменяет размеры, , как ArrayList
.(У него есть метод toByteArray()
).Иногда это практично, чтобы обернуть его в DataOutputStream
. Преимущество заключается в том, что у вас будут дополнительные удобные вызовы (например, writeShort(int)
, если вам нужно записать 2 байта).*BitSet
пригодится, когда вы хотите выполнить операции на уровне битов. Вы можете получить / установить отдельные биты, и он имеет методы логического оператора, такие как xor()
.(Метод toByteArray()
был введен только в Java 7).
Конечно, в зависимости от ваших потребностей, вы можете объединить их все для создания byte[]
.