JS Compress and Decompress
<head>
<title>JavaScript字符串之压缩与还原</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript">
<!--
/**
* 压缩
*/
function Compress(strNormalString) {
alert("压缩前长度:" + strNormalString.length);
var strCompressedString = "";
var ht = new Array();
for(i = 0; i < 128; i++) {
ht[i] = i;
}
var used = 128;
var intLeftOver = 0;
var intOutputCode = 0;
var pcode = 0;
var ccode = 0;
var k = 0;
for(var i=0; i<strNormalString.length; i++) {
ccode = strNormalString.charCodeAt(i);
k = (pcode << 8) | ccode;
if(ht[k] != null) {
pcode = ht[k];
} else {
intLeftOver += 12;
intOutputCode <<= 12;
intOutputCode |= pcode;
pcode = ccode;
if(intLeftOver >= 16) {
strCompressedString += String.fromCharCode( intOutputCode >> ( intLeftOver - 16 ) );
intOutputCode &= (Math.pow(2, (intLeftOver - 16)) - 1);
intLeftOver -= 16;
}
if(used < 4096) {
used ++;
ht[k] = used - 1;
}
}
}
if(pcode != 0) {
intLeftOver += 12;
intOutputCode <<= 12;
intOutputCode |= pcode;
}
if(intLeftOver >= 16) {
strCompressedString += String.fromCharCode( intOutputCode >> ( intLeftOver - 16 ) );
intOutputCode &= (Math.pow(2,(intLeftOver - 16)) - 1);
intLeftOver -= 16;
}
if( intLeftOver > 0) {
intOutputCode <<= (16 - intLeftOver);
strCompressedString += String.fromCharCode( intOutputCode );
}
alert("压缩后长度:" + strCompressedString.length);
return strCompressedString;
}
/**
* 解压缩
*/
function Decompress(strCompressedString) {
var strNormalString = "";
var ht = new Array();
for(i = 0; i < 128; i++) {
ht[i] = String.fromCharCode(i);
}
var used = 128;
var intLeftOver = 0;
var intOutputCode = 0;
var ccode = 0;
var pcode = 0;
var key = 0;
for(var i=0; i<strCompressedString.length; i++) {
intLeftOver += 16;
intOutputCode <<= 16;
intOutputCode |= strCompressedString.charCodeAt(i);
while(1) {
if(intLeftOver >= 12) {
ccode = intOutputCode >> (intLeftOver - 12);
if( typeof( key = ht[ccode] ) != "undefined" ) {
strNormalString += key;
if(used > 128) {
ht[ht.length] = ht[pcode] + key.substr(0, 1);
}
pcode = ccode;
} else {
key = ht[pcode] + ht[pcode].substr(0, 1);
strNormalString += key;
ht[ht.length] = ht[pcode] + key.substr(0, 1);
pcode = ht.length - 1;
}
used ++;
intLeftOver -= 12;
intOutputCode &= (Math.pow(2,intLeftOver) - 1);
} else {
break;
}
}
}
return strNormalString;
}
//-->
</script>
</head>
<body>
压缩前:
<input type="text" id="txtNormal" value="" />
<input type="button" value="↓压缩" onclick="document.getElementById('txtCompressed').value=Compress(document.getElementById('txtNormal').value);" />
<input type="button" value="清除" onclick="document.getElementById('txtNormal').value='';" />
压缩后:<br>
<input type="text" id="txtCompressed" value="" />
<input type="button" value="↑解压" onclick="document.getElementById('txtNormal').value=Decompress(document.getElementById('txtCompressed').value);" />
<input type="button" value="清除" onclick="document.getElementById('txtCompressed').value='';" />
</body>
</html>
转载于:https://www.cnblogs.com/liyinkan/archive/2011/09/16/2178686.html
JS Compress and Decompress相关推荐
- SQL Server 2016 COMPRESS 和 DECOMPRESS 函数
SQL Server 2016 COMPRESS 和 DECOMPRESS 函数 英文原文: https://www.simple-talk.com/blogs/2015/12/24/compress ...
- 前端代码规范文档(Vue、es6、ts、部分js)
Vue 开发规范目录及说明 规范目的 命名规范 结构化规范 注释规范 编码规范 CSS 规范 规范目的 为提高团队协作效率,便于后台人员添加功能及前端后期项目有何迭代,以及提高自身代码质量,让大家书写 ...
- js和css的命名规范
笔者在撸代码是也会遇到不知道给元素或变量起什么名字的问题,中文拼音太俗气,随便敲几个字母又影响代码的查读性.于是总结这些命名规范.有些资料来源于网络 一 .css命名规范 1.命名规则说明: 1) ...
- Asp.Net使用Yahoo.Yui.Compressor.dll压缩Js|Css
网上压缩css和js工具很多,但在我们的系统中总有特殊的地方.也许你会觉得用第三方的压缩工具很麻烦.我就遇到了这样问题,我不想在本地压缩,只想更新到服务器上去压缩,服务器压缩也不用备份之类的操作.于是 ...
- 混淆js代码--Uglifyjs使用
混淆js代码–Uglifyjs使用: 首先,全局下载uglify.js npm install uglify-js -g 然后可以写一个js文件,index.js (function () {let ...
- JS压缩工具UglifyJS使用
JS压缩工具UglifyJS使用 简介 使用 UglifyJS的命令格式如下 uglifyjs的options 参考 简介 UglifyJS是个包含JS解释器.代码最小化.压缩.美化的工具集,是前端开 ...
- uglify js 代码压缩混淆
关于 js 压缩混淆 npm install uglify-js -g(不支持 es6语法) npm install uglify-es -g(支持es6语法) 使用命令uglifyjs uglify ...
- js函数命名常用动词
get 获取/set 设置, add 增加/remove 删除 create 创建/destory 移除 start 启动/stop 停止 open 打开/close 关闭, read 读取/writ ...
- 通过WebAssembly在移动端解码H.265
本文转自淘宝技术,文章详细介绍了如何通过WebAssembly在移动Web端实现H.265解码,既享受到了H.265更高的编码效率,又实现了在多种移动端浏览器上兼容.未来,通过WebAssembly还 ...
最新文章
- java sha1加密ascii码_请问下面java的Sha1加密在c#中对应要怎么写?
- 异常-----Java compiler level does not match解决方法
- Nmap/Netcat/Hping3工具对比
- 虚指针的用法(原出处//http://blog.csdn.net/haoel/article/details/1948051)
- vsftpd 配置说明
- 《分布式操作系统》知识点(15~21)三
- python小游戏代码_20行python代码的入门级小游戏
- php教程链接,php自动给网址加上链接的方法,php网址链接方法_PHP教程
- oracle RAC切换归档
- 最新软件工程总结,项目模板,软工作业下载
- python 字典添加元素乱序了_Python有序字典的两个小“惊喜”
- nginx php 没认,NginX没有执行PHP
- 提高开发效率的 Eclipse 实用操作
- comsol圆柱形永磁体_comsol永磁体仿真
- [计算机视觉多视图几何] -- Homography
- 性格测试c语言程序,性格测试的题目及答案
- 入门须知:次世代3D建模软件有哪些?
- eap协议 c语言,CCNP无线技术知识点-EAP和EAPOL协议报文详解
- 大众速腾信息公开案11月10日开庭
- C++ 简单的CPU使用率监控程序