Я хочу сделать growable массив байтов. Т.е. список. В c# usally сделал бы следующий синтаксис
List<byte> mylist = new List<byte>();
где как в Java этот синтаксис не работает, и я погуглил вокруг и нашел ниже кода
List myList = new ArrayList();
но это не то, что я хочу. Какая-либо идея, где я иду не так, как надо?
Используйте класс-обертку Byte
:
List<Byte> mylist = new ArrayList<Byte>();
Тогда, из-за автобоксинга, у вас все равно получится:
for (byte b : mylist) {
}
Вы также можете использовать TByteArrayList из библиотеки GNU Trove.
У вас есть класс Byte
, предоставленный JRE.
Этот класс является соответствующим классом для примитивного типа byte
.
См. здесь для примитивных типов.
Вы можете сделать это:
List<Byte> myList = new ArrayList<Byte>();
byte b = 127;
myList.add(b);
b = 0; // resetting
b = myList.get(0); // => b = 127 again
Как указал Майкл в комментариях:
List<Byte> myList = new ArrayList<Byte>();
Byte b = null;
myList.add(b);
byte primitiveByte = myList.get(0);
приводит к:
Exception in thread "main" java.lang.NullPointerException
at TestPrimitive.main(TestPrimitive.java:12)
Обратите внимание, что использование ArrayList
для хранения растущего массива байтов, вероятно, не очень хорошая идея, поскольку каждый байт помещается в коробку, что означает выделение нового объекта Byte. Таким образом, общая стоимость памяти на байт составляет один указатель в ArrayList + один объект Byte.
Возможно, лучше использовать java.io.ByteArrayOutputStream
. Там затраты памяти на один байт составляют 1 байт.
Мы сможем дать лучший совет, если вы опишите контекст немного подробнее.