我需要阅读一些由二进制数字组成的极大字符串。这些字符串可能非常大(最多100,000个数字),我需要存储,能够操作(翻转位)并加在一起。我的第一个问题是将字符串拆分为8个字符块,将它们转换为字节并将它们存储在一个数组中。这将允许我相对容易地翻转位,给定需要翻转的位的索引,但是使用这种方法我不确定如何将两个值的全部加在一起。
任何人都可以看到以内存有效的方式存储这些值的方法,这样我就能够对它们进行计算吗?
编辑: “加在一起”(连接?算术加法?) - 算术加法
我的问题是,在最难的情况下,我有两个100,000位数(存储在12,500字节的数组中)。存储和手动翻转位不是问题,但我需要两个数字的总和,然后才能找出它的第x位。
答案 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];
}
你想要这样做吗?