我必须在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常数时,性能成本无关紧要。
byte[]
final static
现在有java.util.HexFormat它可以让你做
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");
我建议您使用 Dave L 在使用 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; }