package java.time;
ZoneId表示时区
通过ZoneId.of("+8")进行实例化
可见用+8的方式实例化是成功的
定义一个bean模拟rpc调用的传输过程
@Data
@AllArgsConstructor
public class Mybean {
@Tag(1)
private String a;
@Tag(2)
private ZoneId b;
public static void main(String[] args) {
Mybean bean = new Mybean("Alice", ZoneId.of("GMT+8"));
RuntimeSchema<Mybean> schema = RuntimeSchema.createFrom(Mybean.class);
LinkedBuffer buffer = LinkedBuffer.allocate(512);
byte[] bytes = ProtostuffIOUtil.toByteArray(bean, schema, buffer);
System.out.println(Arrays.toString(bytes));
RuntimeSchema<Mybean> schema1 = RuntimeSchema.createFrom(Mybean.class);
Mybean bean1 = schema.newMessage();
ProtostuffIOUtil.mergeFrom(bytes, bean1, schema1);
System.out.println(bean1);
System.out.println(ZoneId.of("+8"));
}
}
反序列化之后ZoneId对象为null
很离谱,如果把ZoneId.of("GMT+8")这种情况就可以反序列化成功
对比+8和GMT+8发现少了rules这个属性,可能是序列化为null的问题
反序列化时,带GMT的
反序列化时,不带GMT的