Можно ли преобразовать строго типизированные данные в байты с помощью класса ByteBuffer? - PullRequest
0 голосов
/ 31 августа 2011

Можно ли преобразовать строго типизированные данные в байты с помощью класса ByteBuffer?Если нет, то каково его основное назначение?Если да, я смотрю документацию и ничего не могу найти.Методы put требуют байта, а не int для примера.

Ответы [ 3 ]

3 голосов
/ 31 августа 2011

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

ByteBuffer = Удобное чтение / запись «всех» типов данных в / изПредставление байта:

ByteBuffer - очень удобный класс для преобразования байтов из типов, подобных Int, в представление байтов.Но и наоборот.Вы можете читать «типы» из байтового представления с помощью методов чтения.

Относительно вашего пута Вопрос: Существует универсальный метод пут, который принимает байт.Но также есть множество удобных методов для размещения и чтения большинства стандартных типов данных, в том числе int (как вы и просили):

http://download.oracle.com/javase/1,5.0/docs/api/java/nio/ByteBuffer.html#putInt(int)

ByteBuffer byteBuffer =  ByteBuffer.allocate(4);
byteBuffer.putInt(4);
byteBuffer.get() => gets the byte representation of the Int you put in 

Практический пример использования:

Честно говоря, наиболее интенсивное использование ByteBuffer для меня было до сих пор с Cassandra NoSQL DB.Они хранят все данные как байты (массивы), а ByteBuffer - удобный класс, помогающий вам читать и записывать эти данные.

High-End Usage:

AsВы можете видеть, что класс находится в пакете NIO.Я думаю, что источником ByteBuffer была очень очень эффективная запись данных, например, на диск.Он не записывает его в память раньше, но напрямую отображает область «блоков» на диске в буфер в Java.Так что избегайте любых промежуточных шагов для чтения и записи данных на диск.Но это очень популярное использование ...

2 голосов
/ 31 августа 2011

Эмм, вы имеете в виду как ...

String foo = "My String";
ByteBuffer myBuffer = ByteBuffer.wrap(foo.getBytes());

РЕДАКТИРОВАТЬ: Для int вы можете сделать ...

int i = 1234;
ByteBuffer b = ByteBuffer.allocate(4);
b.putInt(i);
1 голос
/ 31 августа 2011

Ну, вы можете сериализовать ваши объекты, если они реализуют serializable, и сохранить сериализованные байты в ByteBuffer, если вы действительно этого хотите.

Основное назначение ByteBuffer - буферизация байтов, что позволяет ускорить асинхронную передачу.находится и помещает этот кусок в ByteBuffer.Это не сработает.Я имею в виду, вы могли бы сделать это, но удачи в возвращении объекта в работоспособное состояние.Вы должны поработать над этим, например, превратить указатели в значимые новые адреса (ссылаясь на места, где вы сохранили фактические поля объекта или еще много чего).Это сериализация, и это то, что делает serializable.

...