我在XML文件中存储了许多base64编码的64位双精度块.双重数据看起来都很相似.
双重数据当前在编码之前使用java'Deflate'算法进行压缩,但是文件中的每个二进制数据块都有自己的deflate数据字典,这是我想要大大减少的开销.'Deflater'类有一个'setDictionary'方法,我想使用它.
所以问题是:
1).有没有人有任何关于如何最好地建立我自己的单个自定义数据字典的建议,基于多个双打(x8字节),他可以用于多个deflate操作,即对所有压缩使用相同的字典?我应该在所有字节数组中寻找公共字节,最常见的字节放在字典数组的末尾吗?
2).我可以将(自定义)数据字典与缩小的数据分开,然后在再次膨胀数据之前将字典设置为缩小的数据吗?
3).deflate算法是否会使用我的自定义数据字典,然后只是创建自己稍微不同的数据字典,既可以使我的单数据字典无效,又可以减少使用单数据字典的潜在空间节省?
4).有人可以详细说明zlib压缩数据的结构,以便我自己可以尝试将数据字典与压缩数据分开吗?
我想在我的文件中只使用一次数据字典空间,并在我的文件中将其用于我的双数据的每个块,但不用双数据存储它.如果数据字典无法与放气数据分开/单独存储,那么构建自定义单数字典似乎没什么价值,因为无论如何每个压缩块都有自己的字典.这是正确的吗?
我在使用java泛型时遇到问题 - 特别是使用通配符捕获.这是我所拥有的代码的简化版本,它展示了我所看到的问题.这让我抓狂:
public class Task {
private Action<ActionResult, ? extends ActionSubject> action;
private ActionSubject subject = new ActionSubjectImpl();
private List<ActionResult> list = new ArrayList<>();
public static void main(String[] args) {
Task task = new Task();
task.setAction(new ActionImpl());
task.doAction();
}
public void setAction(Action<ActionResult, ? extends ActionSubject> action) {
this.action = action;
}
public void doAction() {
list.add(action.act(subject));
}
public static class ActionResult { }
public interface Action<T, U> {
public T act(U argument);
}
public interface ActionSubject {
public String …Run Code Online (Sandbox Code Playgroud)