小编use*_*178的帖子

在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
查看次数

标签 统计

bit ×1

bit-manipulation ×1

java ×1

packing ×1