JavaScript 中 Gzip 的实现
Gzip
是一种广泛使用的标准格式,用于归档单个文件。它提供了一个容器来存储使用你选择的压缩算法、原始文件名、时间戳和其他内容(例如可选注释)、默认 CRC 等压缩的文件。
本文将介绍如何使用 JavaScript 实现 Gzip。
在 JavaScript 中使用 LZW
压缩算法实现 Gzip
LZW
压缩使用由 Abraham Lempel、Jacob Ziv 和 Terry Welch 发明的基于表格的搜索算法将文件压缩成更小的文件。
gzip-js
是 GZIP 文件格式的纯 JavaScript 实现。
HTML 代码:
<textarea id="rTxt" cols=100 rows=15>Fusce feugiat lacus quis felis consectetur, at placerat ipsum mollis. Suspendisse facilisis ligula diam. Sed eu neque a nisl porttitor dictum vitae eget nibh. Cras mollis lorem ac nisi dictum, et euismod mi ultricies. Donec ullamcorper eget neque non rutrum. Sed sem turpis, vehicula ut leo auctor, rutrum dignissim nisl. Curabitur vulputate metus semper, laoreet neque et, malesuada ligula. Aenean nec elementum tortor. Duis blandit ut ante a pulvinar. Phasellus id imperdiet mi.</textarea><br/>
<input type="button" id="doComp" value="Compress" /><span id="txtSize"></span>
<hr/>
<textarea id="cTxt" cols=100 rows=5></textarea>
<br/>
<input type="button" id="doUComp" value="Expand" /><span id="compSize"></span>
<hr/>
<textarea id="eTxt" cols=100 rows=5></textarea>
JavaScript 代码:
function lzw_encode(s) {
var dict = {};
var data = (s + '').split('');
var out = [];
var currChar;
var phrase = data[0];
var code = 256;
for (var i = 1; i < data.length; i++) {
currChar = data[i];
if (dict[phrase + currChar] != null) {
phrase += currChar;
} else {
out.push(phrase.length > 1 ? dict[phrase] : phrase.charCodeAt(0));
dict[phrase + currChar] = code;
code++;
phrase = currChar;
}
}
out.push(phrase.length > 1 ? dict[phrase] : phrase.charCodeAt(0));
for (var i = 0; i < out.length; i++) {
out[i] = String.fromCharCode(out[i]);
}
return out.join('');
}
function lzw_decode(s) {
var dict = {};
var data = (s + '').split('');
var currChar = data[0];
var oldPhrase = currChar;
var out = [currChar];
var code = 256;
var phrase;
for (var i = 1; i < data.length; i++) {
var currCode = data[i].charCodeAt(0);
if (currCode < 256) {
phrase = data[i];
} else {
phrase = dict[currCode] ? dict[currCode] : (oldPhrase + currChar);
}
out.push(phrase);
currChar = phrase.charAt(0);
dict[code] = oldPhrase + currChar;
code++;
oldPhrase = phrase;
}
return out.join('');
}
document.getElementById('doUComp').onclick = function() {
compressedText = document.getElementById('cTxt').value;
expandedText = lzw_decode(compressedText);
document.getElementById('eTxt').value = expandedText;
} document.getElementById('doComp').onclick = function() {
regularText = document.getElementById('rTxt').value;
compressedText = lzw_encode(regularText);
document.getElementById('cTxt').value = compressedText;
document.getElementById('compSize').innerHTML =
'Compressed Size :' + compressedText.length;
document.getElementById('txtSize').innerHTML =
'Original Size :' + regularText.length;
}
上面的代码是纯 JavaScript 实现,不应在服务器上用于生产代码。主要目标是向浏览器添加 GZIP
压缩。
输出:
当你运行代码时,你会看到这样的输出。
当你单击 Compress
按钮时,它将压缩文件并显示原始大小和压缩大小。这是一个压缩示例(即 Zip 文件)。
单击 Expand
按钮时,它将解压缩文件并提供原始输出。
相关文章
JavaScript 关联数组和哈希表
发布时间:2024/03/22 浏览次数:75 分类:JavaScript
-
本教程展示了使用对象和 Map() 函数实现 JavaScript 关联数组和哈希表。
JavaScript ArrayBuffer
发布时间:2024/03/22 浏览次数:147 分类:JavaScript
-
在本文中,学习 JavaScript 中的 ArrayBuffer 对象。我们将通过不同的示例介绍如何创建和操作 ArrayBuffer 对象。
在 Visual Studio Code 中运行 JavaScript
发布时间:2024/03/22 浏览次数:64 分类:JavaScript
-
本教程将指导你如何在 Visual Studio Code 中运行 JavaScript 代码。
在 JavaScript 中返回 False
发布时间:2024/03/21 浏览次数:166 分类:JavaScript
-
本文解释 JavaScript 中的 return false 和 preventDefault 语句;何时何地使用这些语句,它们之间有什么区别。
使用 JavaScript 将 HTML 表格导出到 Excel
发布时间:2024/03/21 浏览次数:151 分类:JavaScript
-
本教程演示了如何使用 JavaScript 将 HTML 表格数据导出到 Excel。
用 JavaScript 读取 Excel 文件
发布时间:2024/03/21 浏览次数:87 分类:JavaScript
-
在本文中,我们将了解如何在 JavaScript 中读取和解析 excel 文件。
使用 JavaScript 通过 XPath 获取元素
发布时间:2024/03/21 浏览次数:65 分类:JavaScript
-
本教程介绍如何使用 JavaScript Selenium WebDriver 获取元素 XPath。