javascript - javascript中的float数组压缩

标签 javascript arrays string performance compression

我看到很多js的压缩方法,但大多数情况下压缩数据都是字符串,并且包含文本。我需要压缩 0-1 范围内少于 10^7 个 float 的数组。

由于精度并不是很重要,最终我可以将其保存为仅包含数字 0-9 的字符串(每个 float 仅包含小数点后的 2 个第一位数字)。什么方法最适合这样的数据?我想要尽可能小的输出,但压缩这个字符串的时间不应超过 10 秒,当每个 float 保存 2 位数字时,它大约有 10 000 000 个符号。我看到了很多 js 的压缩方法,但是在大多数情况下,压缩数据都是字符串形式,并且包含文本。我需要压缩 0-1 范围内少于 10^7 个 float 的数组。

由于精度并不是很重要,最终我可以将其保存为仅包含数字 0-9 的字符串(每个 float 仅包含小数点后的 2 个第一位数字)。什么方法最适合这样的数据?我希望输出尽可能小,但解压缩此字符串的时间不应超过 ~10 秒,当每个 float 保存 2 位数字时,它大约有 10 000 000 个符号。

数据包含用于在不支持 Web Audio API 的陈旧浏览器上可视化的声音波形记录。波形在 Chrome 用户客户端上以 20 fps 的速度记录,压缩并存储在服务器数据库中。然后在请求绘制可视化后发送回 IE 或 ff - 所以我需要有损压缩 - 实现能够与歌曲元数据请求一起发送的大小可能真的有损。我希望 wav -> mp3 64k 级别的压缩是可能的(比如 200:1 或其他)没有人会认识到波形在可视化上并不完美,我想也许将这些 float 保存为 0-9a-Z 它给出 36 而不是100 步但将一个频率的记录减少到 1 个符号。但是接下来,对这个带有 0-Z 符号的字符串使用什么压缩来实现最佳压缩? lzma 适合这样的字符串吗?压缩/解压将在 web worker 上运行,因此它不需要真正即时 - 解压如 10 秒,压缩无关紧要 - 而不是一首歌曲,所以大约 2 分钟

最佳答案

在黑暗中试一试,如果你真的只能依靠小数点后的前两位数(即数组中没有 0.00045s),并且你需要两位数,那么最简单的方法就是乘法乘以256取整数部分为一个字节

encoded = Math.floor(floatValue * 256)
decoded = encoded / 256.0

但是,如果您对数据了解得更多,就可以从您的值中挤出更多的熵。结果是 4:1 的压缩比。

关于javascript - javascript中的float数组压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18806863/

相关文章:

javascript - 错误 : undefined is not a function

java - 固定长度数组与字段

c - C语言重新初始化指针

c# - 在字符串中的特定短语之前查找单词

C++ - 重复使用 istringstream

javascript - Angular 用户界面路由器状态问题

javascript - 在 Javascript 中模拟长按

iOS 将字符串传递给另一个应用程序

javascript - 如果进行其他输入,则在复选框上显示检查

vb.net - 如何让数组一次显示其所有值