繁体   English   中英

是否可以使用ByteBuffer类将强类型数据转换为字节?

[英]Is it possible to convert strongly-typed data to bytes using the ByteBuffer class?

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

您可能知道,在计算机编程中,大多数数据都以某种方式以字节格式存储在较低的级别上。

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 ,如果确实需要,可以将序列化的字节存储在ByteBuffer中。

ByteBuffer的主要用途似乎是缓冲字节,因此可以加快异步传输的速度。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM