java - 我如何创建自己的 zip 类文件?

标签 java zip

我希望能够创建一个类似于 zip 的文件,但同时它又不是真正的 zip。

假设我有一个程序,它将获取一堆文件和目录并将它们存储到一个名称和扩展名为 data.rds 的文件中,您将需要相同的程序来将它们从中提取出来。我在很多不同的游戏中看到它们使用诸如 .arc.nsa.mxdl 等文件格式,这些格式都存储了许多其中的文件,.rar 可能是最常见的格式。这四个扩展无法作为普通 zip 打开,并且需要特定的程序才能从中提取文件,我想了解如何将多个文件加密和解密为一个文件,而不使其像它一样可读将位于普通的 zip 文件中。

人们会如何去做这件事呢?我知道这将是一个漫长的过程,并且不会用几行简单的代码来回答,但如果有人可以指出我学习如何做这样的事情的方向,那将会有所帮助。

最佳答案

无论你发明什么格式,总会有人找到它的。任何人都可以反编译您的代码并查看您的算法。

我只会使用 Zip 格式并为文件指定不同的扩展名(听起来您已经在这样做了)。防止临时观察者打开文件的一个简单方法是在文件前面放置几个垃圾字节:

private static final byte[] secretSignature = { 10, 20 };

void writeData(Path file)
throws IOException {
    try (OutputStream out = new BufferedOutputStream(
            Files.newOutputStream(file))) {
        out.write(secretSignature);

        ZipOutputStream zip = new ZipOutputStream(out);
        // Write zip entries
        zip.finish();
    }
}

void readData(Path file)
throws IOException {
    try (InputStream in = new BufferedInputStream(
            Files.newInputStream(file))) {
        in.skip(secretSignature.length);

        ZipInputStream zip = new ZipInputStream(in);
        ZipEntry entry;
        while ((entry = zip.getNextEntry()) != null) {
            // Read entry
        }
    }
}

关于java - 我如何创建自己的 zip 类文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29210572/

相关文章:

java - Jenkins多次执行bash JDK安装脚本

java - 为什么要为 Collection 类引入泛型?

java - 如何在spring boot中使用mongoDB在实体之间建立关系映射?

支持加密的C++ zip库

java - Maven 依赖插件忽略目标

java - Mockito - 验证集合中的对象是否调用方法

php - 如何创建包含 WordPress 插件文件的 zip 文件安装程序?

java - ZipInputStream getNextEntry 在提取 .zip 文件时为空

java - 为什么我的 java.util.zip 函数显示不一致的行为?

macos - 在 Mac 上解压缩大型 ZIP 文件(如最新的 Microsoft Edge VM)