java - 如何使用前导零字节抑制来压缩 Java 中的变量?

标签 java jvm compression

前导零字节抑制意味着整数值的前导零字节将被删除,而是存储删除的字节数。例如:假设我们有 32 位整数,十六进制值 00000090 将被编码为二进制值 01110010000,其中 011 表示 00000090< 中有 3 个零字节

我的问题是如何在 Java 中实现前导零字节抑制?谁能给我一些例子?

最佳答案

在您的示例中,您建议将 0x00000090 编码为 11 位数字 0b01110010000。您可能知道,Java 中没有 11 位数据类型,因此不可能以“Java 方式”执行此操作。

我能想到的实现您想要做的事情的唯一方法是使用单个字节数组来存储您的所有数据,然后在此基础上实现零字节抑制算法。当然,这将消除 Java 的全部要点,即面向对象。

如果您正在尝试实现某种IntegerZeroByteSuppression 类,那么您的努力将是徒劳的,因为 Java 中的每个对象都带有几个字节的开销,远远超过您的几个字节将从零字节抑制本身中保存。

最后,如果你真的需要你将从中节省的几位内存(怀疑,但我实际上不知道你在做什么),我会建议要么找到一种在其面向对象功能(例如 C++)中几乎没有开销的语言,要么找到一种默认实现零字节抑制的语言(?)。

关于java - 如何使用前导零字节抑制来压缩 Java 中的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31072385/

相关文章:

java - 在 Java 中搜索和替换 DOM 元素

java - JVM如何访问文件系统

compression - Apache Spark 中的 Zip 支持

java - indexoutofboundsexception 通过 Socket 发送图片

java - 在多个 View 持有者 recyclerview 上转换异常

Java Instant 的 bug? `DateTimeException: Invalid value for Year`

c++ - 是否有好的数据翻译/转换模式/习惯用法?

java - JVM 进程与 JVM 堆内存使用情况

Java 转换实现

Java 方法已损坏