-1

是否可以使用ByteBuffer该类将强类型数据转换为字节?如果不是,它的主要目的是什么?如果是,我正在查看它的文档,但什么也找不到。例如,这些put方法需要一个字节而不是一个 int。

4

3 回答 3

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中的缓冲区。因此,它避免了将数据读取和写入磁盘的任何中间步骤。但这是非常高端的用法......

于 2011-08-31T02:47:28.407 回答
2

呃,你的意思是...

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

编辑:int可以做...

int i = 1234;
ByteBuffer b = ByteBuffer.allocate(4);
b.putInt(i);
于 2011-08-31T02:44:09.513 回答
1

好吧,如果你真的想要 ,你可以序列化你的对象,如果它们实现serializable并将序列化的字节存储在 a中。ByteBuffer

ByteBuffer 的主要目的似乎是缓冲字节,以便可以加快异步传输。

似乎您正在考虑获取对象所在的 RAM 块并将该块放入 ByteBuffer 中。这行不通。我的意思是,你可以做到,但祝你好运,让对象恢复到可用状态。您必须对其进行处理,例如将指针转换为有意义的新地址(指您存储对象的实际字段或诸如此类的位置)。这是序列化,这就是serializable它的作用。

于 2011-08-31T02:44:19.917 回答