热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

可变长字节码算法

:本篇文章主要介绍了可变长字节码算法,对于PHP教程有兴趣的同学可以参考一下。
最近在看《大规模WEB服务开发技术》这本书中。书中提到“可变长字节码算法”的压缩数据的算法,以达到压缩数据,减少磁盘IO。
可变长字节码算法:
任意一个字节的最高位(下标7)均只作为标志位,而且根据字节所在位置需要乘以128的相应幂次;

这是他的伪代码
可变长字节码算法

仔细研究后,我翻译成PHP版的:

($n){
        $bytes = [];
        while (true){
            array_unshift($bytes, bcmod($n, 128));
            if($n <128){
                break;
            }else{
                $n = intval($n/128);
            }
        }
        $bytes[count($bytes) - 1] += 128;
        return $bytes;
    }

    function encode($numbers){
        $bytestream = [];
        foreach ($numbers as $n){
            $bytestream = array_merge($bytestream, codeNumber($n));
        }
        return $bytestream;
    }

    function decode($bytestream){
        $numbers = [];
        $n = 0;
        for ($i = 0; $i ($bytestream); $i++){
            if($bytestream[$i] <128){
                $n = 128 * $n + $bytestream[$i];
            }else{
                $n = 128 * $n + ($bytestream[$i] - 128);
                array_push($numbers, $n);
                $n = 0;
            }
        }
        return $numbers;
    }
    $a = encode([5, 130, 288]);
    var_dump($a);
    var_dump(decode($a));

打印出来的内容是:
array(5) { [0]=> int(133) [1]=> string(1)"1" [2]=> int(130) [3]=> string(1)"2" [4]=> int(160) }
array(3) { [0]=> int(5) [1]=> int(130) [2]=> int(288) }

    //写二进制
    $h = fopen('ejz3.txt', 'wb');
    foreach ($a as $k => $v)
    {
      $str3 =  pack('H*', sprintf("%02x", $v));
      fwrite($h,  $str3);
    }
    fclose($h);

    //读二进制
    $str2 = file_get_contents('ejz3.txt');
    $str2 = unpack("H*", $str2);
    $value = str_split($str2[1], 2);
    foreach ($value as $k => $v)
    {
      $value[$k] = base_convert($v, 16, 10);
    }

').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('
  • ').text(i)); }; $numbering.fadeIn(1700); }); });

    以上就介绍了可变长字节码算法,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

  • 推荐阅读
    • 深入解析Unity3D游戏开发中的音频播放技术
      在游戏开发中,音频播放是提升玩家沉浸感的关键因素之一。本文将探讨如何在Unity3D中高效地管理和播放不同类型的游戏音频,包括背景音乐和效果音效,并介绍实现这些功能的具体步骤。 ... [详细]
    • 本文提供了处理WordPress网站中出现过多重定向问题的方法,包括检查DNS配置、安装SSL证书以及解决数据库连接错误等步骤。 ... [详细]
    • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
    • 解决ADODB连接Access时出现80004005错误的方法
      本文详细介绍了如何解决在使用ADODB连接Access数据库时遇到的80004005错误,包括错误原因分析和具体的解决步骤。 ... [详细]
    • 本文探讨了一种常见的C++面试题目——实现自己的String类。通过此过程,不仅能够检验开发者对C++基础知识的掌握程度,还能加深对其高级特性的理解。文章详细介绍了如何实现基本的功能,如构造函数、析构函数、拷贝构造函数及赋值运算符重载等。 ... [详细]
    • 随着Linux操作系统的广泛使用,确保用户账户及系统安全变得尤为重要。用户密码的复杂性直接关系到系统的整体安全性。本文将详细介绍如何在CentOS服务器上自定义密码规则,以增强系统的安全性。 ... [详细]
    • 本文对宋代著名诗人吕渭老的作品《情久长》进行了细致的翻译和赏析,深入探讨了诗中蕴含的情感与艺术特色。 ... [详细]
    • 本文详细介绍如何安装和配置DedeCMS的移动端站点,包括新版本安装、老版本升级、模板适配以及必要的代码修改,以确保移动站点的正常运行。 ... [详细]
    • 本文提供了一种通过调整内核电压来增强设备抗干扰能力的方法,以解决部分杰里AC696X设备在LDO15模式下通话时出现的重启问题。 ... [详细]
    • 探讨了在HTML表单中使用元素代替进行表单提交的方法。 ... [详细]
    • 如何在PPT中创建交互式跳转按钮
      许多企业在日常工作中都会用到PPT,但你知道如何在PPT中制作一个可以实现页面跳转的按钮吗?本文将详细介绍在PPT中创建跳转按钮的方法和步骤。 ... [详细]
    • 本文对元代诗人萨都剌的《酹江月·姑苏台怀古》进行了详尽的翻译和赏析,深入探讨了诗中蕴含的历史情感与文化内涵。 ... [详细]
    • 一文详解Linux
      Linuxnetfilter与VRF实验环境如下图所示:配置如下:#!binbashsudoipnetnsaddns1sudoiplinkaddns1veth1typevethpe ... [详细]
    • 网络分析仪中的噪声参数解析
      本文探讨了网络分析仪中噪声参数的作用及其对测量精度的影响。通过深入分析噪声参数如何随源阻抗变化,解释了其在不同测量条件下的表现。 ... [详细]
    • JavaScript 跨域解决方案详解
      本文详细介绍了JavaScript在不同域之间进行数据传输或通信的技术,包括使用JSONP、修改document.domain、利用window.name以及HTML5的postMessage方法等跨域解决方案。 ... [详细]
    author-avatar
    谁会心如刀割_590
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有