无论如何都要将枚举转换为字节数组?我目前正在使用Hbase并且在HBase中应该将所有内容转换为字节数组以便持久化,因此我需要将枚举值转换为字节数组:)
答案 0 :(得分:3)
您可以创建一个简单的实用程序类,将枚举的名称转换为字节:
public class EnumUtils {
public static byte[] toByteArray(Enum<?> e) {
return e.name().getBytes();
}
}
这与您的方法类似,但更清晰(更安全,因为它仅适用于枚举)。
public enum Colours {
RED, GREEN, BLUE;
}
public class EnumUtilsTest {
@Test
public void testToByteArray() {
assertArrayEquals("RED".getBytes(), EnumUtils.toByteArray(Colours.RED));
}
}
答案 1 :(得分:2)
如果您的枚举值少于256,则可以使用序数或代码。
enum Colour {
RED('R'), WHITE('W'), BLUE('B');
private final byte[] code;
Colour(char code) {
this.code = new byte[] { (byte) code };
}
static final Colour[] colours = new Colour[256];
static {
for(Colour c: values())
colours[c.getCode()[0]] = c;
}
public byte[] getCode() {
return code;
}
public static Colour decode(byte[] bytes) {
return colours[bytes[0]];
}
}
BTW这使用1字节数组,并且在此过程中不会产生垃圾。
答案 2 :(得分:1)
我使用name()
方法解决了我的问题。例如:
Enum TimeStatus {
DAY,NIGHT
}
byte[] bytes = toBytes(TimeStatus.DAY.name());