DataInputStream 的 readLong():解析 Java 字节序如何将 8 字节变量拼装为 64 位整数

梦浩君_7439

梦浩君_7439

2026-05-08

908人浏览

原创

datainputstream.readlong()按大端序读取8字节并组装为long值,第1字节为最高有效字节(bit 56–63),第8字节为最低有效字节(bit 0–7);不支持小端,需手动反转字节序处理。

datainputstream 的 readlong():解析 java 字节序如何将 8 字节变量拼装为 64 位整数

DataInputStream.readLong() 从输入流中读取 8 个字节,并按大端序(Big-Endian)将其解释为一个 long 值——即最高有效字节(MSB)在前,最低有效字节(LSB)在后。

字节序决定字节如何“拼装”成数值

Java 所有内置的 readXxx() 方法(包括 readLong())都严格遵循网络字节序(即大端序)。这意味着:

  • 第 1 个读到的字节作为 long 的高 8 位(bit 56–63)
  • 第 2 个字节作为 bit 48–55
  • ……依此类推
  • 第 8 个字节作为低 8 位(bit 0–7)

例如,若流中连续 8 字节为:0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,则 readLong() 返回值为:

Java Maven Code Review
Java Maven Code Review

审查Java Maven项目(ZIP压缩包或GitLab仓库URL),检查代码规范、命名、模块边界、可维护性问题以及重复代码。

下载
0x0102030405060708L

底层拼装逻辑(等效实现)

该方法内部行为可近似理解为以下步骤(忽略异常和阻塞细节):

  • 依次调用 readByte() 八次,得到 b0 到 b7
  • 计算:((b0 & 0xFFL)
  • 注意:每个 byte 被提升为 long 并与 0xFFL 按位与,避免符号扩展污染高位

遇到小端数据怎么办?

DataInputStream 不支持小端读取。若源数据是小端(如某些 C 程序或硬件协议输出),需手动反转字节顺序:

  • 先用 readFully(byte[8]) 读入字节数组
  • 将数组倒序(bytes[0] ↔ bytes[7],bytes[1] ↔ bytes[6],以此类推)
  • 再用 ByteBuffer.wrap(reversed).getLong() 或手动移位解析

与 ByteBuffer 的对比

ByteBuffer 支持切换字节序:buffer.order(ByteOrder.LITTLE_ENDIAN);而 DataInputStream 固定大端,不可配置。这是设计定位差异——前者面向灵活二进制操作,后者面向标准 Java 数据序列化(如配合 DataOutputStream 使用)。

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关专题

更多
点击input框没有光标怎么办
点击input框没有光标怎么办

点击input框没有光标的解决办法:1、确认输入框焦点;2、清除浏览器缓存;3、更新浏览器;4、使用JavaScript;5、检查硬件设备;6、检查输入框属性;7、调试JavaScript代码;8、检查页面其他元素;9、考虑浏览器兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.24

754

4

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

2026.09.30

120

10

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

2026.09.30

100

14

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

2026.09.30

80

12

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

2026.09.30

60

26

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

2026.09.29

80

15

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

2026.09.23

280

15

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

2026.09.23

180

15

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

2026.09.23

140

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习