我希望能够创建一个类似于 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/