`
chen_yongkai
  • 浏览: 61179 次
  • 性别: Icon_minigender_1
  • 来自: 福州
文章分类
社区版块
存档分类
最新评论

Java对象序列化实用方法集

阅读更多
有人问及相关问题,就顺便贴出代码。其实方法都很简单:
	//对象序列化写入文件
	public static void writeObject(Object obj, File file) throws FileNotFoundException, IOException {
		if (obj == null)
			throw new NullPointerException("obj are null.");
		ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(
				new FileOutputStream(file)));
		try {
			oos.writeObject(obj);
		} finally {
			oos.close();
		}
	}
  //对象序列化并压缩写入文件
	public static void writeCompressedObject(Object obj, File file) throws FileNotFoundException,
			IOException {
		if (obj == null)
			throw new NullPointerException("obj are null.");
		ObjectOutputStream oos = new ObjectOutputStream(new GZIPOutputStream(new FileOutputStream(
				file)));
		try {
			oos.writeObject(obj);
		} finally {
			oos.close();
		}
	}
	//从文件读取序列化的对象
	public static <T> T readObject(File src) throws IOException, ClassNotFoundException {
		ObjectInputStream ois = null;
		try {
			ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(src)));
			return (T) ois.readObject();
		} finally {
			ois.close();
		}
	}
  //从文件读取序列化并压缩的对象
	public static <T> T readCompressedObject(File src) throws IOException, ClassNotFoundException {
		ObjectInputStream ois = null;
		try {
			ois = new ObjectInputStream(new GZIPInputStream(new FileInputStream(src)));
			return (T) ois.readObject();
		} finally {
			ois.close();
		}
	}


如果要对序列化结果做加密,原理类似,加密算法有很多,不多说了。
以上是Java对象序列化的文件操作,下面展示与字节数组的相互转换。
	public static <T extends Serializable> byte[] getBytes(T obj) throws IOException {
		byte[] b = serialize(obj, false).toByteArray();
		return b;
	}

	public static <T extends Serializable> byte[] getCompressedBytes(T obj) throws IOException {
		byte[] b = serialize(obj, true).toByteArray();
		return b;
	}

	private static <T extends Serializable> ByteArrayOutputStream serialize(T obj, boolean compressed)
			throws IOException {
		ByteArrayOutputStream buf = new ByteArrayOutputStream();
		ObjectOutputStream oos = null;
		try {
			if (compressed)
				oos = new ObjectOutputStream(new GZIPOutputStream(buf));
			else
				oos = new ObjectOutputStream(buf);
			oos.writeObject(obj);
		} finally {
			if (oos != null)
				oos.close();
		}
		return buf;
	}

	public static <T extends Serializable> T getObject(byte[] b) throws IOException,
			ClassNotFoundException {
		return deserialize(b, false);
	}

	public static <T extends Serializable> T getCompressedObject(byte[] b) throws IOException,
			ClassNotFoundException {
		return deserialize(b, true);
	}

	private static <T extends Serializable> T deserialize(byte[] data, boolean compressed)
			throws IOException, ClassNotFoundException {
		ByteArrayInputStream in = new ByteArrayInputStream(data);
		ObjectInputStream ois = null;
		try {
			if (compressed)
				ois = new ObjectInputStream(new GZIPInputStream(in));
			else
				ois = new ObjectInputStream(in);
			return (T) ois.readObject();
		} finally {
			IOUtils.close(ois);
		}
	}

0
3
分享到:
评论

相关推荐

    介绍Java对象序列化使用基础

    序列化的过程就是对象写入字节流和从字节流中读取对象。将对象状态转换成字节流之后,可以用java.io包中的各种字节流类将其...对象序列化问题在网络编程中并不是最激动人心的课题,但却相当重要,具有许多实用意义。

    java对象序列化Demo------------Serializable

    java 序列化 对象 Serializable 写着玩的Demo 简单 实用

    java序列化反序列化

    java序列化反序列化 可以将一个对象保存起来哦,哈哈,很实用,别忘了实现序列化接口

    《Java2程序设计实用教程(第2版)》例题

    《Java2程序设计实用教程(第2版)》例题

    Java2实用教程.rar

    10 10序列化与对象克隆 10 11文件锁FileLock 10 12Process类中的流 10 13带进度条的输入流 习题 第11章Java网络的基本知识 11 1使用URL 11 2读取URL中的资源 11 3显示URL资源中的HTML文件 11 4处理超链接 11 5...

    javabean-marshaller:将对象图序列化为其Java代码

    代替使用XML或JSON序列化,将数据集生成为Java语言。 此格式更适合于性能和重构目的。 技术支持 基本类型及其包装器类 枚举 馆藏与地图 数组(1维和2维) java.util.Date,java.sql.Date,日历,...

    ysoserial:概念证明工具,用于生成利用不安全的Java对象反序列化的有效负载

    一种概念证明工具,用于生成利用不安全的Java对象反序列化的有效负载。 描述 最初作为AppSecCali 2015讲座一部分发布,其中包含针对Apache Commons Collections(3.x和4.x),Spring Beans / Core(4.x)和Groovy...

    实验5 JAVA常用类.doc

    本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)实验报告,基础篇有JAVA环境搭建、Java语言基础、方法和数组、面向对象基础、Java常用类、继承与接口、成员访问控制与异常、JavaFX程序设计、Java...

    ysoserial:一种概念验证工具,用于生成利用不安全的Java对象反序列化的有效负载

    约瑟 概念证明工具,用于生成利用不安全的Java对象反序列化的有效负载。描述最初作为AppSecCali 2015讲座一部分发布,其中包含Apache Commons Collections(3.x和4.x),Spring Beans / Core(4.x)和Groovy( 2.3.x...

    JAVA_API1.6文档(中文)

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

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

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

    Java工程师面试复习指南

    序列化和反序列化 继承封装多态的实现原理 集合类 Java集合类总结 Java集合详解:一文读懂ArrayList,Vector与Stack使用方法和实现原理 Java集合详解:Queue和LinkedList Java集合详解:迭代器,快速失败机制与比较器...

    java api最新7.0

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

    JAVA上百实例源码以及开源项目

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

    JAVA上百实例源码以及开源项目源代码

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

    JAVA_API1.8中文文档(CHM版).rar

    中文版,平时开发超实用工具。 Java 2 Platform 软件包 java.applet 提供创建 applet...java.io 通过数据流、序列化和文件系统提供系统输入和输出。 java.lang 提供利用 Java 编程语言进行程序设计的基础类。 ......

    Java 1.6 API 中文 New

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

    java源码包4

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

    java源码包3

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

Global site tag (gtag.js) - Google Analytics