作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在 Java 中将 Enum 值转换为字节数组,我在 StackOverflow 上找到了以下帖子:
How to cast enum to byte array?
但是,这并没有帮助。
我想迭代枚举的所有元素并将它们转换为字节数组或将整个枚举转换一次。
最佳答案
以字节表示的实例基本上是序列化,所以我想你可以简单地采用它
enum MyEnum implements Serializable {
A
}
对于序列化为 byte[]
,您可以使用此 source code from Taylor Leese我已经进步了一点:
这将使我们能够序列化每个Serialized
实例
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
不是必需的,但我觉得这样更安全。
关于java - 如何在Java中将枚举转换为字节数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50816511/
我是一名优秀的程序员,十分优秀!