我必须在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" };
在Java 6中,有一种方法正是您想要的:
private static final byte[] CDRIVES = javax.xml.bind.DatatypeConverter.parseHexBinary("e04fd020ea3a6910a2d808002b30309d")
或者你可以使用谷歌番石榴:
import com.google.common.io.BaseEncoding;
private static final byte[] CDRIVES = BaseEncoding.base16().lowerCase().decode("E04FD020ea3a6910a2d808002b30309d".toLowerCase());
当你使用小数组时,番石榴方法是多余的。但是Guava也有可以解析输入流的版本。在处理大的十六进制输入时,这是一个很好的特性。
byte[] myvar = "Any String you want".getBytes();
字符串文字可以转义,以提供任何字符:
byte[] CDRIVES = "\u00e0\u004f\u00d0\u0020\u00ea\u003a\u0069\u0010\u00a2\u00d8\u0008\u0000\u002b\u0030\u0030\u009d".getBytes();
您可以使用实用程序函数将熟悉的六进制字符串转换为字节[]
。当用于定义final static
常量时,性能成本是无关的。
现在有了java.util.HexFormat
,您可以使用它
java prettyprint-override">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;
}
问题内容: 我必须在Java中以字节数组形式存储一些常量值(UUID),并且我想知道初始化这些静态数组的最佳方法是什么。这就是我目前的做法,但我觉得必须有更好的方法。 有什么我可以使用的,虽然效率可能较低,但看起来会更干净?例如: 问题答案: 使用将十六进制字符串转换为的函数,您可以执行 我建议您在使用Java将十六进制转储的字符串表示形式转换为字节数组中使用 DaveL定义的功能吗? 我将其插入
问题内容: 我正在初始化这样的数组: NetBeans在此行指出一个错误: 我该如何解决这个问题? 问题答案: 上面的信息不正确(语法错误)。这意味着你正在分配一个仅可容纳元素的数组。 如果要初始化数组,请尝试使用: 注意两个声明之间的区别。将新数组分配给声明的变量时,new必须使用。 即使你纠正了语法,访问仍然是不正确的(你只能访问,因为Java中的数组索引是基于0的)。访问]将抛出。
问题内容: 我想初始化一个BlackJack游戏的Player对象数组。我已经阅读了很多有关初始化原始对象(例如int数组或字符串数组)的各种方法的信息,但是我无法将此概念理解为我在此处尝试做的事情(见下文)。我想返回一个初始化的Player对象数组。要创建的播放器对象的数量是一个整数,我向用户提示。我以为构造函数可以接受一个整数值并在初始化Player对象的一些成员变量时相应地命名播放器。我
问题内容: 我无法按照以下代码初始化列表: 我遇到以下错误: 无法实例化类型 我该如何实例化? 问题答案: 如果你检查API,则会注意到它说: 作为一种手段,它无法实例化(不可能)。 如果你检查该链接,则会发现一些实现的: 所有已知的实施类: 那些可以实例化。使用它们的链接来了解有关它们的更多信息,即IE:知道哪个更适合你的需求。 三种最常用的可能是: 奖励: 你还可以使用,以更简单的方式使用值实
本文向大家介绍如何在Java 9的JShell中初始化数组?,包括了如何在Java 9的JShell中初始化数组?的使用技巧和注意事项,需要的朋友参考一下 Java中的数组 也是一个对象。我们需要声明一个数组然后创建。为了声明一个包含整数数组的变量,我们可以像int [] array一样提到。在数组中,索引 从0到(数组的长度-1)开始。 片段1 在下面的代码片段中,我们可以创建一个标记数组来存储
问题内容: 如何在Java中声明和初始化数组? 问题答案: 你可以使用数组声明或数组文字(但只有当你立即声明并影响变量时,数组文字才能用于重新分配数组)。 对于原始类型: 例如,对于类,String是相同的: 当你首先声明数组然后对其进行初始化时,第三种初始化方法很有用。