Экземпляр, представленный в байтах, по сути является сериализацией, поэтому я думаю, вы могли бы просто пойти с этим
enum MyEnum implements Serializable {
A
}
А для сериализации в byte[]
вы можете пойти с этим источникомкод от Taylor Leese , который я немного улучшил:
Это позволит нам сериализовать каждый Serializable
экземпляр
public static byte[] serial(Serializable s) throws IOException {
try (ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutput out = new ObjectOutputStream(bos)) {
out.writeObject(s);
out.flush();
return bos.toByteArray();
}
}
Таким образом, мы можем преобразовать байт []снова в экземпляр (осторожно с классом send, это может привести к некоторому исключению приведения
@SuppressWarnings("unchecked")
public static <T extends Serializable> T unserial(byte[] b, Class<T> cl) throws IOException, ClassNotFoundException {
try (ByteArrayInputStream bis = new ByteArrayInputStream(b)) {
ObjectInput in = null;
in = new ObjectInputStream(bis);
return (T) in.readObject();
}
}
И мы можем проверить это:
public static void main(String[] args) throws Exception {
byte[] serial = serial(Enum.A);
Enum e = unserial(serial, Enum.class);
System.out.println(e);
}
С этим можно отметить, что enum
всегда сериализуем, поэтому implements
не требуется, но я чувствую, что так безопаснее.