数据存储:大端和小端

本文介绍了字节序的概念,包括大端和小端的存储方式,并通过示例展示了如何测试计算机硬件的字节序。在Java中,字节码文件采用大端存储,但JVM的实现可能依赖于底层硬件的小端存储,因此在读取字节码时需要处理字节序问题。此外,文章提及了字节码文件的魔数校验过程中的字节序处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

字节序

大端和小端

大端小端测试

写入测试

字节码文件的大小端


      前面说到,像C/C++这类语言编写的程序,它们被编译后,直接转换成了对应平台上的可被CPU直接运行的机器指令,转换之后,原本语言中的数据结构,例如结构体信息都被替换掉了,换成了各个数据在内存中的地址和偏移量,操作系统并不知道原来的数据的类型,例如一段C程序被编译成汇编语言后,结构体信息被拆成了一条条对内存操作的指令,一个个变量都变成了首地址,原本的C代码结构不复存在。Java则不同,我们知道Java语言因为跨平台性的原因,程序在转变成机器可执行的指令之前,需要先翻译成中间语言-字节码文件,字节码有它特定的结构,会将Java中的类型结构信息存储起来,待JVM加载字节码文件时,会保存所有的元数据,元数据也就是原始的类型信息,上篇日志中opp-klass模型里的instanceKlass,它保存了Java类的所有信息,例如里面的方法和变量,也正因为了有了这种机制,JVM才支持“反射”,运行Java程序在运行期间能够动态获取实例对象的类型,方法等信息。

 

字节序

      Java语言实现跨平台性,执行前先被编译成统一字节码文件,.class文件与平台无关,只与JVM有关,之后在不同的操作系统环境(Linux,Windows之类)下由不同的JVM来解释执行.class文件,虽然同一Java程序生成的字节码文件相同,但数据在不同平台上的存储方式是不同的。我们知道,字节数据在计算机中存储,或者在网络中收发,是要按照一定的顺序的,这种字节输入输出和存储的顺序,即字节序,在不同的硬件环境中有所不同。拿网络中收发数据包来举例,在传输层发送的数据包如果太大,就会被拆分成多个包,每一个小的数据包都有序号,接收方接收到每一个包都要按照顺序组装成一个完整的包,这样即使按顺序先发出去的1号包没有被先接收,而是先接收到2号包,接收方也会等待,待1号包接收后先将其递交给上层,如果不严格按照顺序收发,存储,那么通信双方发送的数据就无法正确译码。

 

大端和小端

      前面说到不同的操作平台上,数据存储在内存和磁盘

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值