如何管理和操作极大的二进制值

时间:2012-02-04 16:16:22

标签: java byte bit

我需要阅读一些由二进制数字组成的极大字符串。这些字符串可能非常大(最多100,000个数字),我需要存储,能够操作(翻转位)并加在一起。我的第一个问题是将字符串拆分为8个字符块,将它们转换为字节并将它们存储在一个数组中。这将允许我相对容易地翻转位,给定需要翻转的位的索引,但是使用这种方法我不确定如何将两个值的全部加在一起。

任何人都可以看到以内存有效的方式存储这些值的方法,这样我就能够对它们进行计算吗?

编辑: “加在一起”(连接?算术加法?) - 算术加法

我的问题是,在最难的情况下,我有两个100,000位数(存储在12,500字节的数组中)。存储和手动翻转位不是问题,但我需要两个数字的总和,然后才能找出它的第x位。

2 个答案:

答案 0 :(得分:1)

“二进制数字字符串”对我来说肯定听起来像字节数组。要将两个这样的字节数组“添加”在一起,你只需要分配一个新的字节数组,它足以容纳所有内容,并使用System.arraycopy复制内容。

然而假设每个“字符串”是8位的倍数。如果要将15位的字符串“添加”到另一个15位的字符串,则需要进行位移。这可能是你的问题吗?根据您需要的操作,您甚至可能只想保留一个知道两个字节数组的对象,并且可以在逻辑连接的“字符串”中找到任意位。

无论哪种方式,byte[]都将成为前进之路 - 或者可能是BitSet

答案 1 :(得分:0)

怎么样?
// Addition

byte[] resArr = new byte[byteArr1.length];

for (int i=0; i<byteArr1.length; i++)
{
    res = byteArr1[i]+byteArr2[i];
}

你想要这样做吗?