`
61party
  • 浏览: 1108072 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Java 图像对象序列化

阅读更多

版权声明:转载时请务必保留以下作者信息和链接
作者:陈维(chenweionline@hotmail.com)作者的网站:http://www.chenwei.mobi

我们都知道,图像对象可以编码成指定图像格式文件保存在硬盘上,需要时再对其进行解码读入内存。但是除了这样还有别的办法可以将图像对象保存在硬盘上吗? 熟悉Java I/O 的人也许可以想到采用对象序列化(Object serialization)试一试,很好,但是如果你研究了 BufferedImage类的结构后就会大失所望(至少当时我是这样)。

BufferedImage提供一般图像管理。BufferedImage 对象包括另外两个对象:Raster 和 ColorModel。Raster 对象包含另外两个对象:DataBuffer 和 SampleModel。不幸的是,他们都没有实现序列化所必需的 Serializable 接口,所以无法直接对他们进行对象序列化。

我在学习 JAI 的时候发现了 javax.media.jai.remote 包里有一个类 SerializableRenderedImage,这个类实现了RenderedImage, Serializable 接口,可以将 RanderedImage 对象作为构造函数的参数实例化一个可以序列化的图像对象。

查看JDK的文档可以知道无论 Java 2D 中的 BufferedImage 还是 JAI 中的 PlanarImage 都实现了 RenderedImage 接口,也就是说所有实现自 RenderedImage 接口的对象均可作为参数包装出一个 SerializableRenderedImage 类型对象,将其序列化。


下面是一个简单的例子说明了这个类的使用方法:

importjava.io.*;
importjavax.media.jai.remote.*;

importjava.awt.image.*;

publicclassSomeSerializableClassimplementsSerializable...{
protectedtransientRenderedImageimage;

publicSomeSerializableClass(RenderedImageimage)...{
this.image=image;
}


//Serializationmethod.
privatevoidwriteObject(ObjectOutputStreamout)throwsIOException...{
out.defaultWriteObject();
out.writeObject(
newSerializableRenderedImage(image,true));
}


//Deserializationmethod.
privatevoidreadObject(ObjectInputStreamin)throwsIOException,ClassNotFoundException...{
in.defaultReadObject();
image
=(RenderedImage)in.readObject();
}

}
分享到:
评论

相关推荐

    java反序列化工具

    Java反序列化是一种将已序列化的对象状态转换回对象的过程,它是Java平台中持久化数据的一种常见方式。在Java应用程序中,序列化用于保存对象的状态以便稍后恢复,或者在网络间传输对象。然而,这个过程也可能引入...

    java序列化实现演示

    Java序列化是Java平台中的一种标准机制,允许对象的状态被保存到磁盘或者在网络中进行传输,以便在后续的时间或地点恢复这些对象。这个过程包括两个主要操作:序列化(将对象转换为字节流)和反序列化(将字节流恢复...

    序列化、反序列化图文例子

    此外,“Serialize Image”标签表明,除了基本的对象序列化之外,例子可能还涉及图像数据的序列化。在Java中,我们可以使用`javax.imageio.ImageIO`类将`BufferedImage`对象写入文件,实现图像数据的序列化。反序列...

    java 简单 网络套接字 序列化&反序列化实用实例,可供初学习者学习

    这会将对象序列化并发送到服务器。 ```java Socket socket = new Socket(serverAddress, serverPort); ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream()); out.writeObject(message); ...

    Image类的序列化

    总的来说,虽然Java的`Image`类本身不支持序列化,但通过转换为可序列化的`BufferedImage`和自定义序列化逻辑,我们可以实现`Image`类的序列化,从而方便地保存和传输图像数据。在实际开发中,确保理解序列化的过程...

    JAVA序列化和反序列化的底层实现原理解析

    3、实现Java对象序列化与反序列化的方法 假定一个User类,它的对象需要序列化,可以有如下三种方法: (1)若User类仅仅实现了Serializable接口,则可以按照以下方式进行序列化和反序列化ObjectOutputStream采用...

    字节流,字符流,对象流,序列化,持久化

    对象序列化是实现持久化的一种方式,但不是唯一的方式。数据库存储、文件系统存储和云存储等也是常见的持久化机制。持久化可以帮助我们在程序重启或崩溃后恢复数据,确保数据不丢失。 总的来说,字节流、字符流和...

    io_输入输出流_序列化反序列化_04.zip

    文件io_04可能包含了一些示例代码或练习,用于演示如何使用Java的IO流进行文件操作,以及如何实现对象的序列化和反序列化。这可能包括创建和读取文件,使用不同类型的流进行数据传输,以及处理序列化过程中的异常和...

    android 二进制传输 序列化

    5. **FastAndroidSerialization**:针对Android优化的序列化库,提供了快速的对象序列化和反序列化功能。 在Intent中使用序列化,通常是为了在不同的Activity之间传递复杂对象。例如,如果你需要通过Intent将一个...

    s4-png:将S4 PNG Java序列化的对象转换为实际图像

    s4-png 将S4 PNG Java序列化的对象转换为实际图像三星Galaxy S4库存浏览器创建的PNG文件实际上是TabData序列化的对象。 该程序将存储在TabData对象中的位图数据转换为可通过普通照片软件查看的PNG文件。编译javac * ...

    Mysql存储java对象实例详解

    1. **对象序列化**:Java对象不能直接存入数据库,需要将其转换为可存储的数据形式,通常是字节数组。这可以通过Java的序列化机制实现。使用`ObjectOutputStream`将Java对象写入`ByteArrayOutputStream`,如下所示:...

    Hessian 2.0序列化协议规范.docx

    日期对象序列化时,首先编码一个整数表示时间戳,然后根据需要编码时区信息。 4.4. double double类型的数值使用不同的压缩格式来节省空间: 4.4.1. 压缩格式:double表示的0 0.0的表示非常紧凑,只用一个字节。 ...

    Json对象和Java对象互转md,学习代码

    标题中的“Json对象和Java对象互转”是一个关键的话题,涉及到Web开发中数据交换和序列化的重要环节。在Java开发中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于前后端交互,因为其...

    简单java传图片

    5. **数据序列化与反序列化**:在Java中,如果版本号是自定义对象,可能需要使用序列化和反序列化技术进行传输。`Serializable`接口标记对象可以被序列化,而`ObjectOutputStream`和`ObjectInputStream`用于对象的...

    java 图像像素统计处理程序

    `ObjectOutputStream`可以用来写入序列化的对象到文件。 总的来说,这个Java程序提供了一个基础框架,可以用来进行像素级别的图像处理。你可以在此基础上添加更复杂的算法,如图像滤波、色彩转换、边缘检测等,以...

    JAVA_API1.6文档(中文)

    javax.sql.rowset.serial 提供实用工具类,允许 SQL 类型与 Java 编程语言数据类型之间的可序列化映射关系。 javax.sql.rowset.spi 第三方供应商在其同步提供者的实现中必须使用的标准类和接口。 javax.swing 提供...

    面向对象的程序设计(JAVA)第二次作业

    ”被写入文件objectStore.ser:这是正确的,因为通过ObjectOutputStream的`writeObject()`方法可以将对象序列化到文件中。 - B) 第3行导致编译错误:这不正确,因为代码片段中没有语法错误。 - C) 代码可以编译...

    面向对象大胆向前 Java API 实战-Markdown格式的笔记

    笔记会讲解字节流和字符流的区别,以及如何使用缓冲区提高效率,还会涵盖文件流、网络流和对象序列化。 ### 6. 集合框架(8:Java Collections FrameWork-Java API 实战.md) Java集合框架是管理对象的容器,如...

    java源码包---java 源码 大量 实例

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

Global site tag (gtag.js) - Google Analytics