首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >流式文件增量编码/解码

流式文件增量编码/解码
EN

Stack Overflow用户
提问于 2017-03-01 11:46:24
回答 3查看 1.5K关注 0票数 4

这就是问题所在--我想在服务器上生成一个二进制文件(大小>1MB)的增量,并通过HTTP将增量发送到内存受限( RAM低,没有动态内存)的嵌入式设备。Deltas是首选的(而不是从服务器发送完整的二进制文件),因为通过网络传输数据的成本很高。

问题是,嵌入式设备无法解码增量并在内存中创建新文件的内容。我研究了各种二进制增量编码/解码算法,如bsdiff、VCDiff等,但无法找到支持流的库。

也许,与其问是否有合适的库存在,我还可以采取哪些替代方法来解决原始问题(通过网络发送最少的数据)?不过,如果有合适的delta库支持流式解码(用C或C++编写,不使用动态内存),这肯定会有所帮助。

EN

回答 3

Stack Overflow用户

发布于 2017-03-10 02:51:38

在服务器上维护嵌入式设备保存的当前文件的副本。当您想要发送更新时,将文件的新版本与旧版本进行异或,并使用任何合理的压缩器压缩生成的流。(允许高成本编码和低成本解码的算法在这里将特别有用。)将压缩流发送到嵌入式设备,嵌入式设备读取流,动态解压缩,并直接对目标文件进行XOR操作(复制)。

如果您的更新使得文件内容随时间变化很小,并保留固定的结构,则XOR流将主要为零,并且将非常好地压缩:传输的字节数将很少,解压缩的工作量将很低,嵌入式设备上的内存需求将最小。你的模型离这些假设越远,这种方法对你的好处就越少。

票数 10
EN

Stack Overflow用户

发布于 2017-03-09 07:23:25

因为您说增量可能是任意随机的(从零增量到完全不同的文件),所以压缩增量可能是一个失败的原因。理论上,随机二进制数据的无损压缩是不可能的。此外,由于嵌入式设备的内存有限,因此使用复杂的-and库来压缩/解压缩偶尔的“简单”增量可能是不可行的。

我建议简单地将新文件以原始字节格式发送到设备,并覆盖现有的旧文件。

票数 4
EN

Stack Overflow用户

发布于 2017-03-10 11:24:54

正如Kevin提到的,压缩随机数据不应该是您的目标。关于您所使用的数据类型的更多注释将会有所帮助。上下文是压缩的关键。

您使用了术语图像,这使得它听起来像经典的视频编解码器挑战。如果你曾经看到过奇怪的视频混叠效果,会影响到改变了的帧部分,然后突然一切都变得清晰起来。您可能已经看到了关键帧和一系列增量帧的概念。其中没有正确地应用增量帧。

在这个模型中,服务器决定哪个更便宜:

  • complete key frame
  • 增量命令

增量命令作为可以覆盖客户端现有缓冲器的一系列写指令来传送。

示例格式:

  • AddressRepeat
  • AddressRepeat
  • AddressRepeat

计算这些增量命令可能有多种方法。一种暴力方法是:

在两个images.

  • Compress之间执行史密斯·沃特曼,将结果转换为增量命令。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42522802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档