java如何处理字节顺序?如果您将应用程序从小端移动到大端,反之亦然。 类的数据成员或属性如何受到影响?Java和字节顺序
回答
清楚如果要映射的较大型的缓冲器在ByteBuffer
则可以指定使用ByteOrder
值的字节序。较早的核心库假定网络顺序。
从ByteBuffer
:
访问二进制数据
此类定义所有其他基本类型的读取和写入值的方法,不同之处布尔值。根据缓冲区的当前字节顺序将原始值翻译为(或来自)字节序列,可通过顺序方法检索和修改。特定的字节顺序由ByteOrder类的实例表示。字节缓冲区的初始顺序始终为BIG_ENDIAN。
和ByteOrder
为您正在处理的平台提供了访问native order的权限。
与此相比,这是不是与当地的本土服务互操作有用旧DataInput
:
读取四个输入字节并返回一个int值。让a-d成为读取的第一个到第四个字节。返回的值是:
(((a & 0xff) << 24) | ((b & 0xff) << 16) | ((c & 0xff) << 8) | (d & 0xff))
Java虚拟机将这种考虑抽象出来,只要您完全在Java中工作,就不需要担心它。你必须考虑字节顺序的唯一原因是你正在与非java进程或类似的进程通信。
编辑:编辑的措词
必须downvote。当您处理由具有不同持久性的非Java应用程序写出的二进制文件时,还有另外一个重要时刻需要考虑排序。终究是一个字吗? :-) – user949300
现在您应该立即断言答案已被修改。 –
@ user949300你说的是真的,虽然我会说这属于“与非java进程通信”标题 – nonVirtualThunk
类文件格式本身是大端(或者更确切地说,在类文件中的所有多字节数据存储在这样一种方式):
所有16位,32位和64位量分别通过读取2,4,8个连续的8位字节构成。多字节数据项总是以big-endian顺序存储,其中高字节排在第一位。
但正如别人提到的那样,作为一个实际的考虑,你应该几乎不用担心这一点。
- 1. Java类AudioFormat:字节顺序
- 2. 网络字节顺序来承载java中的字节顺序
- 3. 网络字节顺序来承载字节顺序转换Java
- 4. 混淆网络字节顺序和主机字节顺序
- 5. 的NSArray和字节顺序
- 6. Java OutputStreamWriter默认字节顺序
- 7. XDR协议字节顺序和网络字节顺序的关系是什么?
- 8. usbmon,USB规范和字节序/字节顺序
- 9. 字节顺序:将java字节转换为c#
- 10. “IBM PC”字节顺序的字节顺序?
- 11. Opengl纹理和字节顺序
- 12. glibc文档和字节顺序
- 13. CAFAudioDescription成员类型和字节顺序
- 14. 字节顺序转换和g ++警告
- 15. Oracle GUIDTORAW和RAWTOGUID函数字节顺序
- 16. PCAP文件和字节顺序
- 17. StreamWriter和UTF-8字节顺序标记
- 18. Linux readw和readl的字节顺序
- 19. boost :: endian和非1字节原子字节顺序?
- 20. 字节顺序在C
- 21. MappedByteBuffer字节顺序颠倒?
- 22. 强制字节顺序
- 23. 反向字节顺序
- 24. 网络字节顺序来承载字节顺序转换在php
- 25. 如何设置sockaddr_in6 :: sin6_addr字节顺序为网络字节顺序?
- 26. 按字母顺序排序Jtree节点
- 27. 套接字:字节顺序混淆
- 28. Java中的字典顺序
- 29. Java - 按字母顺序和数字顺序排列数组列表
- 30. 正确的排序顺序和1字节索引翻转
如果您在原始数据上读取/写入原始数据,则排序只会很重要。网络接口或磁盘。 –
@OliCharlesworth,或通过IPC或通过管道或文件或...接收数据,实际上您可以随时读取或写入数据,而另一端则不是java。 –