例如,我有一个具有short,byte,int类型成员变量的类。
A a = new A();
a.a = 3;
a.b = 0x02;
a.c = 15;
如果我序列化或转换为字节数组,则Array是意外值。
如果值如,
00 03 02 00 00 00 0F
然后,我希望它的字节为,
{{1}}
那么......如何像这样序列化对象?
它需要我的套接字服务器......其他语言
答案 0 :(得分:3)
如果你想要一个字节数组,你可以这样做。但是,如果您使用DataOutputStream之类的东西,最好只调用writeInt,writeShort,...
A a = new A();
a.a = 3;
a.b = 0x02;
a.c = 15;
ByteBuffer bb = ByteBuffer.allocate(7).order(ByteOrder.BIG_ENDIAN);
bb.putShort(a.a).put(a.b).putInt(a.c).flip();
byte[] buffer = bb.array();
for (byte b : buffer)
System.out.printf("%02X ", b);
答案 1 :(得分:0)
您可以使用反射来获取类中的所有fields
,并将它们循环以转换为字节数组。
如果您的所有字段都是Number
(即不是引用也不是boolean
),您可以将其转换并收集到List
Byte
,如下所示:
List<Byte> list = new ArrayList<>();
for (Field field : A.class.getDeclaredFields()) {
// Do something else if field is not a Number
// ...
// Otherwise, convert and collect into list
Number n = (Number) field.get(a);
int size = n.getClass().getDeclaredField("BYTES").getInt(null);
IntStream.range(0, size)
.mapToObj(i -> (byte) (n.longValue() >> 8*(size-i-1)))
.forEach(b -> list.add(b));
}