【问题标题】:what data structure should I use to store binary codes in java?我应该使用什么数据结构在java中存储二进制代码?
【发布时间】:2012-04-18 01:32:56
【问题描述】:

我有 1011110001111101111 等二进制代码。现在我应该使用什么数据结构存储这些代码以便存储它们需要最小的大小?

我不能使用 字符串数组,因为与存储上述二进制代码的十进制等效值相比,所需的大小会更多。

【问题讨论】:

  • 将它们存储在普通整数中?或byte,如果您正在寻找最小容量。
  • 这些位串可以有多长?您考虑过intlong 的明显答案吗?
  • 如果您使用 Integer 或 Long 您可以稍后执行此操作:Integer.toBinaryString(intValue);

标签: java arrays string binary image-compression


【解决方案1】:

java.util.BitSet 专为长度不固定的情况而设计。

【讨论】:

    【解决方案2】:

    根据代码的长度,只需使用intlong

    【讨论】:

    • 如果我们将 10 存储为整数,则需要 4 个字节,其中 10 的二进制是 1010,需要 4 位,那么如何以最小大小将 10 存储为二进制?
    • 如果要将 10b 存储到整数中,请使用 int code=0b10(仅限 java >=1.7)或 Integer.parseInt("10", 2);(每个版本)
    【解决方案3】:

    如果它们很短,请使用byteintlong(取决于有多短)。

    如果它们会更长一点,请使用 bytes、ints 或 longs 组成的数组。例如,如果您需要存储 256 位代码,您可以在 long[4] 中执行此操作。

    如果您需要存储的代码的长度变化很大,您可以考虑使用具有length 成员的类和byteintlongbyte[]int[]long[] 成员用于存储它们(取决于大小和您想要的粒度类型)。或者,如果您真的想尽可能多地打包,您可以从存储区域中留出一些位来保存代码中的位数。

    【讨论】:

    • 如果需要 long[],BitSet 确实是更好的选择,因为它通过方便的功能为您管理 long[] 以访问位
    • @ptriller:是的。我为您的答案添加了指向文档的链接。 :-)
    【解决方案4】:

    每个二进制代码可以按 8 位(一个字节)分成几部分。如果尾部小于 8 位,则有必要定义如何处理尾部。字节数组应该在这里很好地存储每个部分。

    【讨论】:

      猜你喜欢
      • 2014-05-03
      • 1970-01-01
      • 2011-12-12
      • 1970-01-01
      • 2011-10-24
      • 1970-01-01
      • 2019-05-23
      • 2013-04-17
      相关资源
      最近更新 更多