- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我的问题是:有没有什么标准的压缩格式可以保证压缩后的数据流中不会出现某个定界符序列?
我们想设计一个二进制文件格式,包含大块的顺序数据(3D 坐标 + 其他数据,对问题来说并不重要)。每个 block 都应使用标准压缩格式进行压缩,例如 GZIP、ZIP、...
因此,文件结构如下:
FileHeader
ChunkDelimiter Chunk1_Header compress(Chunk1_Data)
ChunkDelimiter Chunk2_Header compress(Chunk2_Data)
...
用例如下:文件应该在Hadoop中拆分读取,所以我们希望能够从文件中的任意字节位置开始,并通过查找分隔符序列找到下一个 block 的开始. ->
分隔符序列不应出现在 block 内。
我知道我们可以对压缩数据进行后处理,“转义”分隔符序列,以防它出现在压缩输出中。但我们最好避免这种情况,因为在解码器中需要“反向转义”,增加复杂性。
我们选择这种文件格式的更多事实:
->
首选标准压缩算法。->
难以在 header 中写入 block 开始字节位置。最佳答案
我不会用压缩方案名称来回答您的问题,但会提示您其他人是如何解决相同问题的。
让我们来看看 Avro。基本上,它们有类似的要求:文件必须是可拆分的,每个数据 block 都可以压缩(您甚至可以选择您的压缩方案)。
来自Avro Specification我们了解到可拆分性是在同步标记的帮助下实现的(“对象存储在可以压缩的 block 中。在 block 之间使用同步标记以允许高效地拆分文件以进行 MapReduce 处理。”) .我们还发现同步标记是一个16 字节 随机生成 值(“该文件的 16 字节随机生成的同步标记。").
它如何解决您的问题?好吧,由于 Martin Kleppmann 几年前对这个问题提供了很好的答案,所以我将复制粘贴他的信息
On 23 January 2013 21:09, Josh Spiegel wrote:
As I understand it, Avro container files contain synchronization markers every so often to support splitting the file. See: https://cwiki.apache.org/AVRO/faq.html#FAQ-Whatisthepurposeofthesyncmarkerintheobjectfileformat%3F
(1) Why isn't the synchronization marker the same for every container file? (i.e. what is the point of generating it randomly every time)
(2) Is it possible, at least in theory, for naturally occurring data to contain bytes that match the sync marker? If so, would this break synchronization?
Thanks, Josh
因为如果它是可预测的,它有时会不可避免地出现在实际数据中(例如想象一下 Avro 文档,说明 同步标记是什么,由网络爬虫下载并存储在 Avro 数据文件;然后同步标记将出现在实际 数据)。数据可能来自恶意来源;使标记随机 使其无法被利用。
可能,但极不可能。给定的随机 16 字节字符串出现在拍字节(均匀分布)数据中的概率 大约是 10^-23。您的数据中心更有可能被摧毁 陨石 (http://preshing.com/20110504/hash-collision-probabilities)。
如果同步标记出现在您的数据中,只有当您碰巧也在文件中查找该位置时,它才会中断读取文件。如果你只是 按顺序阅读它,没有任何反应。
马丁
Link to the Avro mailing list archive
如果它适用于 Avro,那么它也适用于您。
关于hadoop - 压缩格式和分隔符序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38161285/
有没有办法使用 Clojure format(基于 java.util.Formatter)或 cl-format(基于 Common Lisp 的format) 以编程方式设置空格填充?如果您事先知
我正在尝试创建一个用户实体以及数据/文件(pdf格式)。上传并保存到数据库很好,但是当我让用户进入 postman 时尝试发送获取请求方法,然后在数据字段中显示一些糟糕的数据,而且我无法在数据库中看到
我必须将值为 {"STX","ETX"} 的普通字符串数组转换为十六进制值,并且我应该根据 http://www.asciitable.com/ 得到 {2,3} . 最佳答案 听起来你想要一个 Ma
我想格式化我的代码,但不确定哪种格式类型最适合我的项目需要。 我发现仅对于 dart 和 flutter 项目(我都有),有不止一个选项可用于格式化编程语言/框架中预先构建的代码。 Dart : da
我已经尝试了多个代码,例如这样 Sub DateFixer() Application.ScreenUpdating = False Application.Calculation =
SolrQuery query = new SolrQuery(); query.setQuery("*:*"); query.add("wt","csv"); server.query(query)
我有一个包含多个字符串的数据库,我从查询中获取了这些记录,并且我在 QString 中收到了这种格式的数据: "Mon, 13 Nov 2017 09:48:45 +0000" 所以,我需要根据文化来
我有一个 Delphi 2007 DBGrid,我想让用户以更新的 Excel 格式 (OOXML) 保存它,但我的标准是用户不需要安装 Excel。有没有人知道任何已经这样做的组件?是的,我已经搜索
我正在我们的普通 html 站点旁边创建一个移动站点。使用 rails 3.1。移动站点在子域 m.site.com 中访问。 我已经定义了移动格式(Mime::Type.register_alias
我正在尝试使用 xmlstarlet 格式化 xml 文件,但我不想创建新的 xml 文件。 我试过了 xmlstarlet fo --inplace --indent-tab --omit-decl
我在 A 列中有一个带有文本的电子表格。 例如 A1=MY TEXT1 A2=MY TEXT2 A3=MY TEXT3 A4=MY TEXT4 A5=MY TEXT5 我想在文本的前后添加撇号 结果是
我想做一些源代码转换(自动导入列表清理),我想保留注释和格式。我听说过一些关于解析器这样做的事情,我认为是 ghc 解析器。 看起来我可以通过从文件中提取内容来使用 hs-src-exts Langu
我在 Excel 中工作,我想根据另一张表中的列表找出一张表中是否有匹配项。 我已将值粘贴到列表中,并希望从另一张表中返回它们的相应值。包含字母和数字的单元格可以正常工作(例如:D5765000),但
我有一个 DurationField在我的模型中定义为 day0 = models.DurationField('Duration for Monday', default=datetime.time
我正在为我的应用程序开发 WMI 查询。它需要为给定的 VID/PID 找到分配的虚拟 COM 端口。使用 WMI Code Creator 我发现...... 命名空间:root\CIMV2 类:W
我试图弄清楚如何使用 NSTextList,但除了 this SO question 之外,在网上几乎没有找到有用的信息。和 the comment in this blog . 使用这个我已经能够创
我要查询all_objects表在哪里last_ddl_time='01 jan 2010'但它拒绝日期格式... 任何机构给我查询的确切格式? 最佳答案 正如 AKF 所说,您应该使用 Trunc除
我试图在我的应用程序中实现聊天功能。我使用了 2 个 JEditorPane。一个用于保存聊天记录,另一个用于将聊天发送到前一个 JEditorPane。 JEditorPane 是 text/h
我在大学里修了一个编译器类(class),内容非常丰富,很有趣,尽管也很多工作。既然给了我们要实现的语言规范,所以我学不到的一件事就是语言设计。我现在正在考虑创建一种有趣的简单玩具语言,以便我可以玩耍
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-topic
我是一名优秀的程序员,十分优秀!