java - Java 中的 ByteBuffer 字节填充

标签 java bytebuffer

我正在开发一个Java程序,其中我需要将short转换为两个字节(然后将其打包到数据包中)。我正在使用 ByteBuffer 来执行转换,它似乎可以工作,但我看到一些明显的字节填充,我不太明白。

这是我写的一个简单示例:

import java.lang.*;
import java.io.*;
import java.nio.ByteOrder;
import java.nio.ByteBuffer;

public class Test {
    public static void main(String args[]) {
        short i = 27015;
        String s = Integer.toHexString(i);

        System.out.println( "i = " + i );
        System.out.println( "s = " + s );
        System.out.println( "---" );

        ByteBuffer b = ByteBuffer.allocate(2);
        b.order(ByteOrder.BIG_ENDIAN);
        b.putShort(i);

        System.out.printf("0x%H\n", b.getShort(0));
        System.out.println( "---" );

        byte[] a = b.array();

        for( int j = 0; j < a.length; j++ )
            System.out.printf("a[" + j + "] = 0x%H\n", a[j]);

        System.exit(0);
    }
}

该程序产生以下输出:

i = 27015
s = 6987
---
0x6987
---
a[0] = 0x69
a[1] = 0xFFFFFF87

ByteBuffer转换为byte数组时,为什么第二个字节用0xFF填充?看起来数组的第二个元素应该是 0x87 而不是 0xFFFFFF87。我错过了什么吗?

谢谢!

最佳答案

When the ByteBuffer is converted to a byte array, why is the second byte padded with 0xFF?

当您使用 %H 进行打印时它将字节转换为 int。它不是 ByteBuffer 中具有这么多位的字节,而是它的打印方式。我建议使用Byte.toHexString(a[j])相反。

关于java - Java 中的 ByteBuffer 字节填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18061498/

相关文章:

java - 读取大文件(例如非常大的文本文档)的最佳方式

java - 为什么 ByteBuffer 不为 putDouble 和 getDouble 保留索引?

c# - 如何用垃圾填充字节数组?

java - 如何在 Mac OS X 上安装 mod_jk

java - Play Framework - 使用 JPA 的分页

java - Double 需要 Jackson 序列化程序,并且需要在运行时指定精度

java - 如何从地址位置获取直接字节缓冲区

Java Unsupported major.minor version 52.0 错误 Minecraft

java - 访问 sun.awt 包中的非公共(public)类 [特别是 : FetcherInfo]

java - 将 StringBuffer 放入 ByteBuffer 中