java - 将多个图像保存在一个文件中

标签 java file image save

在我的程序中,我希望用户能够从一个目录中获取一些图像,并将它们保存在一个文件中,该文件可以传输到另一台计算机,并实际读取和显示(使用相同的程序)。

我该怎么做,特别是如果我想与它一起保存其他数据,也许是对象等。我知道您可以使用 ObjectOutputStream 类,但我不确定如何将它与图像集成。

总的来说,我希望程序能够从单个文件读取/写入数据、对象和图像。

提前致谢。

[编辑 - 来自关于 Zip 文件的回复 + 评论]

一个 zip 或许能够完成这项工作。

但我希望它只被程序读取。 (你认为把它变成一个 zip,改变文件扩展名就可以了,然后在阅读它的时候只是把它追回来并作为一个 zip 阅读??)我不希望用户能够直接看到内容。

我会详细说明它是一个游戏,用户可以使用 xml 文件、图像等创建自己的内容。但是,当用户创建某些东西时,我不希望其他用户能够确切地看到他们是如何创建它的,或者他们使用了什么,而只能看到最终结果。

最佳答案

您可以通过编程方式创建一个 zip 文件,并从 Java 中读取一个 zip 文件,无需将其公开为常规 .zip 文件。

参见:java.io.zip包装以获取更多信息,以及 these其他有关如何的代码示例 read/write使用 java 压缩。

现在如果你想阻止用户解压缩这个文件,但你不想通过加密内容或创建复杂的格式来使你的生活复杂化,你可以模拟一个简单的互联网消息格式,类似于用于电子邮件附加文件。

您可以阅读更多有关 Internet 消息格式的信息 here

这将是一种仅供您的应用程序使用的自定义文件格式,因此您可以尽可能简单地进行操作。你只需要定义你的格式。

可能是:

  • 包含该 bundle 中文件名称(和数量)的 header 。
  • 后跟分隔符列表(例如 limit.a.txt=yadayada 一些标识符,表明您已完成该内容)
  • 实际内容

因此,您使用类似以下内容创建 bundle :

public void createBundle() {
    ZipOutputStream out = .... 
    writeHeader( out );
    writeLimits( out yourFiles );
    for( File f : youFiles ) {
        writeFileTo( f, out );
     }
     out.close();
}

有点……

结果将是一个压缩文件,内容如下:

 filenames =a.jpg, b.xml, c.ser, d.properties, e.txt
 limits.a.jpg =poiurqpoiurqpoeiruqeoiruqproi
 limits.b.xml =faklsdjfñaljsdfñalksjdfa
 limit.s.ser =sdf09asdf0as9dfasd09fasdfasdflkajsdfñlk
 limit.d.properties =adfa0sd98fasdf90asdfaposdifasdfklasdfkñm
 limit.e.txt =asdf9asdfaoisdfapsdfñlj
 attachments=
 <include binary data from a.jpg here>
 --poiurqpoiurqpoeiruqeoiruqproi
 <include binary data from b.xml here>
 --faklsdjfñaljsdfñalksjdfa

等等

既然是你的文件格式,你可以让它尽可能简单,或者让你的生活复杂化 infinitum。

如果您设法在您的应用中包含一个 MIME 库,那可以为您节省很多时间。

最后,如果你想增加额外的安全性,你必须加密文件,毕竟这并不难,问题是,如果你也发送加密代码,你的用户可能会对它感到好奇并将它们反编译为查出。但是一个好的加密机制可以防止这种情况发生。

因此,根据您的需要,您可以选择简单的 zip、具有自定义格式的 zip、具有复杂自定义格式的 zip 或具有自定义复杂加密格式的 zip。

由于范围太广,您可以在此处询问特定部分:https://stackoverflow.com/questions/ask

关于java - 将多个图像保存在一个文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3115777/

相关文章:

python - 为什么 Python 和 wc 在字节数上不一致?

android,哪种形式的数据存储在访问速度和安全性方面更好?

python - 有没有办法用 OpenCV 更好地加载图像

PHP 表单仅将图像发送到 MYSQL 数据库,没有其他值

bash 调整图像尺寸以适合特定大小

Java 井字游戏

c++ - std::ofstream 无缘无故地重复和丢失写入的数据

java - 访问函数内部的变量

java - 提高此场景性能的方法

java - 在java和python中解析非常大的bz2 xml文件(逐个元素)