ZigZag 需要大量开销来写入/读取数字。实际上,我惊呆了,它不仅按原样写入 int/long 值,而且还进行了很多额外的加扰。甚至涉及一个循环: https ://github.com/mardambey/mypipe/blob/master/avro/lang/java/avro/src/main/java/org/apache/avro/io/DirectBinaryEncoder.java#L90
我似乎无法在 Protocol Buffers 文档或 Avro 文档中找到,或者自己推理,这样的加扰数字有什么好处?为什么编码后交替正负数更好?
为什么它们不只是以小端、大端、网络顺序编写的,只需要将它们读入内存并可能反转位字节序?我们用性能买什么?