我必须在java中以字节数组的形式存储一些常量值(UUID),我想知道初始化这些静电数组的最佳方式是什么.我现在就是这么做的,但我觉得一定有更好的方法.

private static final byte[] CDRIVES = new byte[] { (byte)0xe0, 0x4f, (byte)0xd0,
    0x20, (byte)0xea, 0x3a, 0x69, 0x10, (byte)0xa2, (byte)0xd8, 0x08, 0x00, 0x2b,
    0x30, 0x30, (byte)0x9d };
private static final byte[] CMYDOCS = new byte[] { (byte)0xba, (byte)0x8a, 0x0d,
    0x45, 0x25, (byte)0xad, (byte)0xd0, 0x11, (byte)0x98, (byte)0xa8, 0x08, 0x00,
    0x36, 0x1b, 0x11, 0x03 };
private static final byte[] IEFRAME = new byte[] { (byte)0x80, 0x53, 0x1c,
    (byte)0x87, (byte)0xa0, 0x42, 0x69, 0x10, (byte)0xa2, (byte)0xea, 0x08,
    0x00, 0x2b, 0x30, 0x30, (byte)0x9d };
...
and so on

有没有可能效率较低,但看起来更干净的我可以使用的东西? 例如:

private static final byte[] CDRIVES =
    new byte[] { "0xe04fd020ea3a6910a2d808002b30309d" };

推荐答案

您可以使用实用程序函数将熟悉的十六进制字符串转换为byte[]. 当用于定义final static常量时,性能成本是无关紧要的.

自Java 17以来

现在有java.util.HexFormat个可以让你这么做

byte[] CDRIVES = HexFormat.of().parseHex("e04fd020ea3a6910a2d808002b30309d");

此实用程序类允许您指定一种格式,如果您发现其他格式更易于阅读或正在从引用源复制粘贴时,该格式将非常方便:

byte[] CDRIVES = HexFormat.ofDelimiter(":")
    .parseHex("e0:4f:d0:20:ea:3a:69:10:a2:d8:08:00:2b:30:30:9d");

在Java 17之前

我建议你使用Dave L在Convert a string representation of a hex dump to a byte array using Java?中定义的函数

byte[] CDRIVES = hexStringToByteArray("e04fd020ea3a6910a2d808002b30309d");

为了最大程度地提高可读性,我将其插入此处:

public static byte[] hexStringToByteArray(String s) {
    int len = s.length();
    byte[] data = new byte[len / 2];
    for (int i = 0; i < len; i += 2) {
        data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
                             + Character.digit(s.charAt(i+1), 16));
    }
    return data;
}

Java相关问答推荐

如何用Java表示C++类以通过FFI使用?

如何将一些命令写入Chrome控制台,然后使用Java将输出存储在selenium中

Java 22模式匹配不适用于记录模式匹配.给出汇编问题

RxJava PublishSubject缓冲区元素超时

Java模式匹配记录

如何让JFileChooser(DIRECTORIES_ONLY)从FolderName中的空白开始?

存根基类的受保护方法

如何调整工作时间日历中的时间

相同的Java SerializedLambda为implMethodKind返回不同的结果

Chunk(Int)已弃用并标记为要删除

与Spring Boot相关的实体未正确保存

我正在try 跟踪数组中最大的两个数字

将Spring Boot 3.2.0升级到3.2.1后查询执行错误

Tinylog中的滚动文件会在每次应用启动时覆盖日志(log)文件

Java17支持哪个MapR版本?

舰队运行配置Maven版本

根本不显示JavaFX阿拉伯字母

Android Studio模拟器没有互联网

在实例化中指定泛型类型与不指定泛型类型之间的区别

Java List有一个在一个位置添加多个元素的方法,但我找不到一个在一个位置删除多个元素的方法