首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java中初始化字节数组?

如何在Java中初始化字节数组?
EN

Stack Overflow用户
提问于 2012-06-26 21:33:44
回答 8查看 751.1K关注 0票数 163

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

代码语言:javascript
复制
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

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

代码语言:javascript
复制
private static final byte[] CDRIVES =
    new byte[] { "0xe04fd020ea3a6910a2d808002b30309d" };
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-06-26 21:43:43

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

从Java 17开始

现在有了java.util.HexFormat,它可以让你做

代码语言:javascript
复制
byte[] CDRIVES = HexFormat.of().parseHex("e04fd020ea3a6910a2d808002b30309d");

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

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

Java 17之前的版本

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

代码语言:javascript
复制
byte[] CDRIVES = hexStringToByteArray("e04fd020ea3a6910a2d808002b30309d");

我在这里插入它,以获得最大的可读性:

代码语言:javascript
复制
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;
}
票数 129
EN

Stack Overflow用户

发布于 2014-01-16 02:50:15

代码语言:javascript
复制
byte[] myvar = "Any String you want".getBytes();

字符串文字可以转义以提供任何字符:

代码语言:javascript
复制
byte[] CDRIVES = "\u00e0\u004f\u00d0\u0020\u00ea\u003a\u0069\u0010\u00a2\u00d8\u0008\u0000\u002b\u0030\u0030\u009d".getBytes();
票数 101
EN

Stack Overflow用户

发布于 2013-10-08 16:12:38

在Java 6中,有一种方法可以做您想做的事情:

代码语言:javascript
复制
private static final byte[] CDRIVES = javax.xml.bind.DatatypeConverter.parseHexBinary("e04fd020ea3a6910a2d808002b30309d")

或者,您可以使用Google Guava

代码语言:javascript
复制
import com.google.common.io.BaseEncoding;
private static final byte[] CDRIVES = BaseEncoding.base16().lowerCase().decode("E04FD020ea3a6910a2d808002b30309d".toLowerCase());

当您使用小数组时,Guava方法是过度杀伤力。但是Guava也有可以解析输入流的版本。在处理大的十六进制输入时,这是一个很好的特性。

票数 36
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11208479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档