我想编写一个存储后端来存储更大的数据块。数据可以是任何东西,但主要是二进制文件(图像,pdf,jar文件)或文本文件(xml,jsp,js,html,java
…)。我发现大多数数据已经被压缩。如果所有内容都经过压缩,则可以节省大约15%的磁盘空间。
我正在寻找最高效的算法,该算法可以高概率地预测可以压缩或不压缩(无损压缩)大块数据(假设无损压缩),而不必尽可能查看所有数据。
压缩算法可以是LZF,Deflate或类似的算法(可能是Google Snappy)。因此,预测数据是否可压缩应该比压缩数据本身快得多,并且使用更少的内存。
我已经知道的算法:
尝试压缩数据的一个子集,比如说128个字节(这有点慢)
计算128个字节的总和,如果它在一定范围内,则可能不可压缩(在128 * 127的10%之内)(这是快速且相对不错的方法,但是我正在寻找更可靠的方法,因为该算法实际上只查看每个字节的最高位)
查看文件头(相对可靠,但感觉像作弊)
我想大概的想法是,我需要一种可以快速计算字节列表中每个位的概率是否约为0.5的算法。
我已经实现了“ ASCII检查”,“熵计算”和“简化压缩”,并且都给出了良好的结果。我想优化算法,现在我的想法不仅是预测是否可以压缩数据,还可以预测可以压缩
多少 数据。可能使用多种算法。现在,如果我只能接受多个答案…,我将接受效果最佳的答案。
仍然欢迎其他答案(新想法)!如果可能的话,带有源代码或链接:-)
现在在Linux中实现了类似的方法。
根据我的经验,几乎所有可以有效压缩的格式都是非二进制的。因此,检查[0-127]范围内是否有大约70-80%的字符应该可以解决问题。
如果您想“适当地”使用它(即使我真的看不到这样做的理由),则您必须对数据运行(部分)压缩算法或计算熵,如tskuzzy所建议的那样。
问题内容: 我想对数据库中的敏感数据使用加密安全的主密钥-这是无法猜测/可预测的,并且不能由数据库生成(在持久存储对象之前,我需要密钥)。 我了解Java使用带有加密安全随机数生成器的4型UUID,但是我知道UUID并不是完全随机的,所以我的问题是,假设无法从一组现有的uuid中预测uuid,这有多安全? 问题答案: 好吧,如果您想知道UUID的随机性,则必须查看源。 以下代码部分摘自OpenJD
问题内容: 我正在从USGS订购大量的landsat场景,这些场景是tar.gz档案。我正在编写一个简单的python脚本来解压它们。每个档案包含15张tiff图像,大小在60-120 mb之间,总计超过2 gb。我可以使用以下代码轻松提取整个档案: 我实际上只需要在标题中标识为“ bands”的15个tiff中的6个。这些是一些较大的文件,因此它们一起占大约一半的数据。因此,我认为可以通过如下修
问题内容: 我正在研究JavaScript动态加载的树视图用户控件。我想用现实世界的数据进行测试。 是否有人知道有任何公共服务带有API,该API提供了对JSON格式的分层数据的访问? 问题答案: Twitter有一个 返回JSON 的公共API,例如- 一个请求: , 编辑: 由于Twitter限制了其API的要求而被删除… 用Github API的简单示例替换它-返回一个树,在本例中为我的存储
以下是我所做的基本步骤: 要求用户输入表达式(存储为字符串) 遍历每个字符并确定该字符是操作数、运算符、空格还是无效字符 如果(char==操作数)推入堆栈 如果(char==operator)弹出两次并执行算术,然后将结果推送到堆栈 循环外,如果(!stack.empty())结果==stack.top,stack.pop 否则无效表达式 因此,如果堆栈已经是空的,上面的方法可以很好地工作,但是
问题内容: 根据Microsoft在上的文档,NEWSEQUENTIALID的输出是可预测的。但是可预测性如何呢?假设我有一个GUID,该GUID是由生成的,要执行以下操作会有多困难: 计算下一个值? 计算先前的值? 计算第一个值? 即使根本不知道任何GUID,也要计算第一个值? 计算行数?例如,当使用整数时,告诉我应用程序中有842个订单。 以下是有关我在做什么以及各种折衷方法的一些背景信息。
问题内容: 在Ci中,我具有以下功能。如何测试查询是否成功插入而没有错误? 问题答案: 您可以使用codeigniter的功能。 在这里查看更多信息 您可以执行以下操作: