我想将一个枚举值转换为Java中的字节数组,我在StackOverflow上找到了以下帖子:
How to cast enum to byte array?
然而,它没有帮助。
我想迭代枚举的所有元素并将它们转换为字节数组或者将整个枚举转换一次。
答案 0 :(得分:0)
以字节为单位表示的实例基本上是一个序列化,所以我想你可以简单地使用
enum MyEnum implements Serializable {
A
}
要序列化为byte[]
,您可以使用我已经改进的source code from 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();
}
}
有了这个,我们可以再次将byte []转换为一个实例(小心发送类,这可能会抛出一些转换异常
@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
不是必需的,但我觉得这样更安全。
答案 1 :(得分:0)
也许这有帮助
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class Stackoverflow {
public enum Test {
TEST_1, TEST_2
public static void main(String[] args) throws IOException, ClassNotFoundException {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
ObjectOutputStream objectOut = new ObjectOutputStream(bytes);
for (Test testValue : Test.values()) {
objectOut.writeObject(testValue);
}
byte[] result = bytes.toByteArray();
// check result
ObjectInputStream objectIn = new ObjectInputStream(new ByteArrayInputStream(result));
System.out.println(((Test) objectIn.readObject()).name());
System.out.println(((Test) objectIn.readObject()).name());
}
}