图00 Big-Endian(左)and little-endian(右)

大小端的基础知识:

小端 ( little-endian):低位字节在前,高位字节在后。大端(Big-Endian),则反之。具体而言,就是为了说清楚,CPU架构中1字(word)的存储顺序。计算机内存中数据自然流动的顺序就是:低位先来,高位紧随其后

JAVA中所有的二进制文件都是按大端存储,这种存储方式也被称为network order。即在所有的平台上,如Mac、 PC、 UNIX等等运行JAVA,都不用考虑大小端的问题。麻烦的是不同语言开发的程序进行数据交换,如笔者最近的项目,二进制文件是由C生成的,通过redis 消息通道以Json格式发过来,而C语言默认是小端模式,就涉及到大小端转换。有些平台(如Mac、IBM 390)内置用的大端模式,其它一些平台内置用的小端模式 (如Intel)。JAVA帮你屏蔽了各平台字节顺序的差异。开心呀

32位16进制的 0x45679812在内存中的存储(大小端模式)如下图(作者【CoderBaby】:

JAVA代码实现:基于ByteBuffer(可通过Order来设置大端或者小端,默认为大端 — Big-Endian),代码实现如下图(支持网络端口—2字节及4字节的int转换;同时包括了网络端口0 ~ 65535的解析):

/*** 将小端bytes数据转化为大端数据

*

* 默认网络传输字节为大端,java 全部为大端(与平台无关)

* 关于 “Little-Endian and Big-Endian”,详情请参考:

*

*@parambytes

*@return转化后得到的整数

* @Linkhttps://howtodoinjava.com/java/basics/little-endian-and-big-endian-in-java/*

*/

private int bytesToBigEndian(byte[] bytes) {int result = 0;if (bytes == null || bytes.length < 0)return -1;

ByteBuffer buffer=ByteBuffer.wrap(bytes);

buffer.order(ByteOrder.BIG_ENDIAN);if (bytes.length ==RECORD_BYTES_SIZE) {

result=buffer.getInt();

}else if (bytes.length ==PORT_BYTES_SIZE) {//端口号:0 ~ 65535; Short: -32768 ~ 32767

short tmp =buffer.getShort();

result= tmp < 0 ?getUnsignedShort(tmp) : tmp;

}if (result < 0) {

logger.info("Length = " + result + " ; original data:" +bytes);

}returnresult;

}

附:

*****************************************************************************************************

精力有限,想法太多,专注做好一件事就行

我只是一个程序猿。5年内把代码写好,技术博客字字推敲,坚持零拷贝和原创

写博客的意义在于打磨文笔,训练逻辑条理性,加深对知识的系统性理解;如果恰好又对别人有点帮助,那真是一件令人开心的事

*****************************************************************************************************

java 大端 小端 转换_Java 大小端转换(基于ByteBuffer)相关推荐

  1. 汇编码转机器码万能转换工具(Intel 32/64、ARM 大小端、Thumb大小端、ARM V8大小端、Thumb V8大小端、AArch64)

    汇编码转机器码万能转换工具(Intel 32/64.ARM 大小端.Thumb大小端.ARM V8大小端.Thumb V8大小端.AArch64) 众所周知,计算机核心处理器就是CPU是计算机的重要组 ...

  2. 图片在线转换,大小在线转换

    一.图片在线转换,大小在线转换 http://images.my-addr.com/resize_png_online_tool-free_png_resizer_for_web.php 二.图片在线 ...

  3. Python 字节串比特串转换以及大小端相关的几个方法

    大端 小端 介绍 查看当前系统是大端还是小端:sys.byteorder,Windows是小端的,而小端在我们看来是和常规反向地 关于大小端的知识,推荐几篇文章: CPU架构决定大小端模式 理解大端与 ...

  4. c 和java通讯大小端问题处理_记录一个如何解决java与C++socket通信的大小端问题...

    问题背景 oracle jdk默认的socket通信发送int类型数据高位优先.下面是jdk包内部相关源码.(模拟)os.write((len >>> 24) & 0xFF) ...

  5. java大小端字节流解析_记录一个如何解决java与C++socket通信的大小端问题

    问题背景 oracle jdk默认的socket通信发送int类型数据高位优先.下面是jdk包内部相关源码.(模拟) os.write((len >>> 24) & 0xFF ...

  6. python 大小端转换_Python 字节串转换以及大小端相关的几个方法

    查看当前系统是大端还是小端:sys.byteorder,Windows是小端的,而小端在我们看来是和常规反向地 字节串的赋值表达式 bytes((1,2,ord('1'),ord('2'))) # 可 ...

  7. linux查看编译器的大小端,Linux系统大小端判断

    大端模式 大端模式,是指数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中. 小端模式 小端模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中. 判断程序 文件: ...

  8. java个人小管家代码_Java程序设计基础—Java小管家系统构建

    课题一 Java桌面小管家项目分析 任务1 Java桌面小管家项目分析 课题二 了解Java语言 任务2 编写第一个Java程序 课题三 面向对象程序设计思想 任务3 为小管家设计类 任务4 实现小管 ...

  9. java java 大端_Java 大小端转换

    package nlp.nlp; /** * 小端数据,Byte转换 * */ public class ByteConvert { public static void main(String[] ...

  10. java高端架构_Java高端架构师

    说实话,这个问题可以涉及到 MySQL 的很多核心知识,可以扯出一大堆,就像要考你计算机网络的知识时,问你"输入URL回车之后,究竟发生了什么"一样,看看你能说出多少了. 之前腾讯 ...

最新文章

  1. Linq to xml API中 XName 的奇怪实现
  2. 增加数据_太原二手房七月数据出炉,挂牌量增加800余套,万柏林区涨幅大
  3. linux raid auto 软raid parted,linux下的raid5配置方法.doc
  4. 理解Android Binder机制(3/3):Java层
  5. 一段旅程的结束和另一端旅程的开始
  6. 让你的Silverlight程序部署在任意服务器上
  7. 缺失值和异常值的识别与处理_识别异常值-第一部分
  8. qt实现窗口拖动的两种思路
  9. Spring MVC实现Junit Case
  10. SpringCloud学习笔记012---CentOs7搭建高速缓存NoSql Redis单机服务_redis_4.0.1_或者redis_6.0.x_可自定义版本
  11. 程序员如何勇敢说“不”!
  12. Linux-shell编程_xargs命令详解
  13. 用大白话带你理解CPU指令集
  14. 鸿蒙os系统3.0电脑,华为鸿蒙系统升级指南,速看!
  15. UGUI 实现屏幕外怪物的指示箭头
  16. mc小刘yeah粉丝网
  17. 全国计算机等级考试c语言编程题,全国计算机等级考试C语言编程题(附答案)
  18. oracle基础|什么是数据库操作语言|什么是DDL、DML、DCL
  19. 计算机文件保存方式,Word文档的三种保存方式
  20. 点名器——随机数的应用

热门文章

  1. 关于安卓(apk)unity3d游戏汉化简单做一些全面分析
  2. 微型计算机原理及应用课后习题答案,微型计算机原理及应用课后习题答案.doc...
  3. 网络综合布线线缆如何敷设布放_网络综合布线知识点
  4. 软件那么多,恢复数据还靠它
  5. android 动态表情实现,Android编程实现QQ表情的发送和接收完整实例(附源码)
  6. Java集合源码剖析
  7. 校准 Linux 服务器的时间
  8. 华为oj题库分苹果JAVA_华为OJ机试训练(一)
  9. XCodeGhost 病毒检查方法
  10. mysql数据库安全吗_mysql数据库的安全