如何将枚举转换为字节数组?

时间:2014-01-14 08:02:16

标签: java bytearray

无论如何都要将枚举转换为字节数组?我目前正在使用Hbase并且在HBase中应该将所有内容转换为字节数组以便持久化,因此我需要将枚举值转换为字节数组:)

3 个答案:

答案 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());