相关疑难解决方法(0)

在Java中将比特打包成byte []并将其读回来的最有效方法是什么?

我目前使用这两个函数来打包和读取字节数组中的位.想知道是否有人有更好的想法或更快的方法吗?

通过更多优化编辑程序并提出一些计算.目前100mil的Put and Get大约需要12秒而不是16秒.

如果有人正在使用当前代码,请确保传入Put的值是正数,因为它期望无符号数字下降.如果有兴趣,我可以提出签名和未签名的版本.

class BitData
{
    static void Put(byte Data[], final int BitOffset, int NumBits, final int Value)
    {
        final long valLong=(Value&((1L<<NumBits)-1L));
        int posByte=BitOffset>>3;
        int posBit=BitOffset&7;
        int valByte;
        int ModifyBits;

        long lValue;
        int LeftShift;
        ModifyBits=8-posBit;
        if(NumBits<ModifyBits) ModifyBits=NumBits;
        LeftShift=(8-posBit-ModifyBits);
        while(true)
        {
            valByte = Data[posByte];
            if(ModifyBits==8)
            {
                lValue=valLong<<(32-NumBits)>>(24);
                Data[posByte]=(byte)lValue;
            }
            else
            {   
                lValue=valLong<<(32-NumBits)>>(32-ModifyBits)<<LeftShift;
                Data[posByte]=(byte)((valByte & ~(((1<<ModifyBits)-1) << LeftShift)) | lValue);
            }
            NumBits-=ModifyBits;
            if(NumBits==0) break;
            posByte++;          
            ModifyBits=8;
            if(NumBits<ModifyBits) 
            {
                ModifyBits=NumBits;
                LeftShift=(8-ModifyBits);
            }
        }
    }

    static int GetInt(byte Data[], final int BitOffset, …
Run Code Online (Sandbox Code Playgroud)

java bit-manipulation packing bit

11
推荐指数
1
解决办法
4637
查看次数

如何在java中创建一个大数组

我想创建一个大小的布尔数组,用户将其作为输入.例如 - 用户可能会输入一个大数字,如1000000000000; 所以我必须创建一个大小为1000000000000的布尔数组.我面临的问题是,我不能将输入存储为int,因为它无法容纳如此大的数字 - 因此我无法创建数组.Double是一个选项.我可以将输入数字存储为double,但我不知道如何创建双数字大小的数组.这就是这个想法 -

Scanner scanner = new Scanner(System.in);
int target = scanner.nextInt();
boolean [] array_a=new boolean [(target)];
Run Code Online (Sandbox Code Playgroud)

如果目标超过int范围,它将无法工作.任何帮助表示赞赏.

更新:谢谢大家.所以你只能创建一个int的最大范围(2147483648)大小的数组,对吧?内存方面没有提到我.要采取不同的方法.

java

7
推荐指数
2
解决办法
7761
查看次数

标签 统计

java ×2

bit ×1

bit-manipulation ×1

packing ×1