Java_NetWork_Java字节序
来源:互联网 发布:淘宝买家等级怎么看 编辑:程序博客网 时间:2024/05/21 18:54
在前面两篇博客中,介绍了字节序和网路字节序。
如果你有兴趣的话,可以访问 Java_NetWork_Endianness-字节序、 Java_NetWork_Endian相关的几个函数。
这篇博客主要说说JavaVM与字节序,通过一个例子来说明。
我们知道,不同的cpu或者是相同的cpu不同的操作系统,内存存储数据的机制也不一样!
但是Java虚拟机是如何存储数据的呢,换个话说,JVM是大端序还是小端序?举个例子吧!
package mark.zhang;import java.nio.ByteBuffer;import java.util.Arrays;public class JVMEndianTest {public static void main(String[] args) {int x = 0x01020304;ByteBuffer bb = ByteBuffer.wrap(new byte[4]);bb.asIntBuffer().put(x);String ss_before = Arrays.toString(bb.array());System.out.println("默认字节序 " + bb.order().toString() + "," + " 内存数据 " + ss_before);}}
运行这个demo,得到结果应该是这样子的:
默认字节序 BIG_ENDIAN, 内存数据 [1, 2, 3, 4]
可以看出,JVM的字节序是大端序。那麽,是否可以改变JVM的字节序呢?先看下面的例子,再来回答这个问题。
该例子,只是使用ByteBuffer这个类的方法来说明问题。
package mark.zhang;import java.nio.ByteBuffer;import java.nio.ByteOrder;import java.util.Arrays;public class JVMEndianTest {public static void main(String[] args) {int x = 0x01020304;ByteBuffer bb = ByteBuffer.wrap(new byte[4]);bb.asIntBuffer().put(x);String ss_before = Arrays.toString(bb.array());System.out.println("默认字节序 " + bb.order().toString() + "," + " 内存数据 " + ss_before);bb.order(ByteOrder.LITTLE_ENDIAN);bb.asIntBuffer().put(x);String ss_after = Arrays.toString(bb.array());System.out.println("修改字节序 " + bb.order().toString() + "," + " 内存数据 " + ss_after);}}
默认字节序 BIG_ENDIAN, 内存数据 [1, 2, 3, 4]修改字节序 LITTLE_ENDIAN, 内存数据 [4, 3, 2, 1]
ok,说到这里吧!
如果有兴趣的话,可以研究一下ByteBuffer这个类。
- Java_NetWork_Java字节序
- 字节序
- 字节序
- 字节序
- 字节序
- 字节序
- 字节序
- 字节序
- 字节序
- 字节序
- 字节序
- 字节序
- 字节序
- 字节序
- 字节序
- 字节序
- 字节序
- 字节序
- 无向图双连通分量(ZZ)
- 驱动模块和桩模块的概念和区别
- 在Ubuntu上为Android系统编写Linux内核驱动程序
- ARM系统中函数调用时参数传递规则
- UIView的sizeToFit:和fitSize方法
- Java_NetWork_Java字节序
- 关于ADS1.2再利用AXD进行调试的时候总是进入disassembly问题的解决办法!
- 顺序表的一些基本操作
- 如何查看iphone版本呢
- 模板类中操作符重载问题("<<"和">>"重载)[c++]
- Fortran程序的格式
- Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析
- Objective-C语法之数组对象的那些事儿(七)
- J2EE面试题