【发布时间】:2013-12-29 11:55:53
【问题描述】:
有没有一种简单的方法可以随机打乱固定大小的字节块?
我有一个包含许多固定大小字节的大型二进制文件(例如,数百 GB)。我不关心随机性,但想洗牌二进制文件中的两个字节(或者可以是任何固定大小的字节,最多 8 个)元素。有没有办法结合unix核心工具来实现这个目标?如果没有这样的工具,我可能不得不开发一个 C 代码。我想听听人们有什么建议。
【问题讨论】:
-
随机播放 100GB 文件可能需要 很长 时间...
-
Unix 命令行工具通常专门用于处理文本文件,因此最好的办法可能是编写一个程序来执行此操作。由于大小很大,您可能希望使用内存映射一次只洗一点。
-
元素的最大长度是多少?例如,它可以是 1 兆字节吗? 1 GB?
-
最大可以是4字节或8字节。
-
好吧,在这种情况下,我认为您应该直接生成洗牌文件。你知道很多:1.你事先知道会出现什么块,2.你知道分布是平坦的。这意味着您知道一个块的最大出现计数,并且它是一个小数字(可能适合一个字节)。您可以使用此信息直接生成剩余出现计数表,并从中生成文件,同时减少出现计数。所需的内存仅取决于您使用的可能块的数量。
标签: c unix command-line shuffle