如何使用前导零字节抑制来压缩 Java 中的变量?
How to compress variables in Java using leading zero byte suppression?
前导零字节抑制意味着整数值的前导零字节将被删除,而是存储删除的字节数。例如:假设我们有 32 位整数,十六进制值 00000090
将被编码为二进制值 01110010000
,其中 011 表示 00000090
中有 3 个零字节。
我的问题是如何在Java中实现前导零字节抑制?谁能给我一些例子?
在您的示例中,您建议将 0x00000090
编码为 11 位数 0b01110010000
。您可能知道,Java 中没有 11 位数据类型,因此 "the Java way" 是不可能的。
我能想到的实现您想要做的事情的唯一方法是使用单个字节数组来存储您的所有数据,然后在此基础上实施零字节抑制算法。当然,这会删除 Java 的全部要点,即面向对象。
如果你试图实现某种 IntegerZeroByteSuppression
class,你的努力将是徒劳的,因为 Java 中的每个对象无论如何都会有几个字节的开销,远远超过零字节抑制本身节省的几位。
最后,如果你真的需要你从中节省的几位内存(怀疑,但我实际上不知道你在做什么),我建议要么找到一种在面向对象功能方面几乎没有开销的语言(例如 C++),要么找到一种默认实现零字节抑制的语言(?)。
前导零字节抑制意味着整数值的前导零字节将被删除,而是存储删除的字节数。例如:假设我们有 32 位整数,十六进制值 00000090
将被编码为二进制值 01110010000
,其中 011 表示 00000090
中有 3 个零字节。
我的问题是如何在Java中实现前导零字节抑制?谁能给我一些例子?
在您的示例中,您建议将 0x00000090
编码为 11 位数 0b01110010000
。您可能知道,Java 中没有 11 位数据类型,因此 "the Java way" 是不可能的。
我能想到的实现您想要做的事情的唯一方法是使用单个字节数组来存储您的所有数据,然后在此基础上实施零字节抑制算法。当然,这会删除 Java 的全部要点,即面向对象。
如果你试图实现某种 IntegerZeroByteSuppression
class,你的努力将是徒劳的,因为 Java 中的每个对象无论如何都会有几个字节的开销,远远超过零字节抑制本身节省的几位。
最后,如果你真的需要你从中节省的几位内存(怀疑,但我实际上不知道你在做什么),我建议要么找到一种在面向对象功能方面几乎没有开销的语言(例如 C++),要么找到一种默认实现零字节抑制的语言(?)。