是否可以使用ByteBuffer
类将强类型数据转换为字节?如果没有,它的主要目的是什么?如果是,我正在查看its documentation并且什么都找不到。 put
方法需要一个字节,而不是一个例子。
答案 0 :(得分:3)
您可能知道,在计算机编程中,大多数数据都以字节格式存储在较低级别。
ByteBuffer =方便地从字节表示中读取/写入“所有”数据类型:
ByteBuffer是一个非常方便的类,用于将Bytes从“Int”类型转换为Byte表示。但反过来也是如此。您可以使用read方法从字节表示中读取“类型”。
关于你的put问题:有一个接受字节的泛型put方法。但是也有很多方便的方法来放置和读取大多数标准数据类型,也就是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是一个方便的类,可以帮助您读取和写入这些数据。
高端用法:
正如您所看到的,该课程是在NIO包中。我认为ByteBuffer的起源是非常高效地将数据写入磁盘。它之前没有在内存中写入它,而是直接将磁盘上“块”的区域映射到java中的缓冲区。因此,它避免了将数据读写到磁盘的任何中间步骤。但这是非常高的用途...
答案 1 :(得分:2)
String foo = "My String";
ByteBuffer myBuffer = ByteBuffer.wrap(foo.getBytes());
编辑:对于int
你可以做...
int i = 1234;
ByteBuffer b = ByteBuffer.allocate(4);
b.putInt(i);
答案 2 :(得分:1)
好吧,如果对象实现serializable
并且如果你真的想要将序列化字节存储在ByteBuffer
中,你可以序列化它们。
ByteBuffer的主要用途似乎是缓冲字节,因此可以加速异步传输。
似乎您正在考虑获取对象所在的RAM块并将该块放入ByteBuffer。这不行。我的意思是,你可以做到,但祝你好运,让对象回到可用的状态。您必须对其进行操作,例如将指针转换为有意义的新地址(指存储对象的实际字段或诸如此类的地方)。这是序列化,这是serializable
所做的。