是否可以使用ByteBuffer
该类将强类型数据转换为字节?如果不是,它的主要目的是什么?如果是,我正在查看它的文档,但什么也找不到。例如,这些put
方法需要一个字节而不是一个 int。
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中的缓冲区。因此,它避免了将数据读取和写入磁盘的任何中间步骤。但这是非常高端的用法......
呃,你的意思是...
String foo = "My String";
ByteBuffer myBuffer = ByteBuffer.wrap(foo.getBytes());
编辑:你int
可以做...
int i = 1234;
ByteBuffer b = ByteBuffer.allocate(4);
b.putInt(i);
好吧,如果你真的想要 ,你可以序列化你的对象,如果它们实现serializable
并将序列化的字节存储在 a中。ByteBuffer
ByteBuffer 的主要目的似乎是缓冲字节,以便可以加快异步传输。
似乎您正在考虑获取对象所在的 RAM 块并将该块放入 ByteBuffer 中。这行不通。我的意思是,你可以做到,但祝你好运,让对象恢复到可用状态。您必须对其进行处理,例如将指针转换为有意义的新地址(指您存储对象的实际字段或诸如此类的位置)。这是序列化,这就是serializable
它的作用。