SerializationUtils.java

package javax.utils;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.HashMap;
import java.util.Map; /**
* 序列化工具类
*
* @author Logan
* @version 1.0.0
*
*/
public class SerializationUtils { /**
* 序列化对象
*
* @param obj 对象
* @return 序列化后的字节数组
* @throws IOException
*/
public static byte[] serialize(Object obj) throws IOException {
if (null == obj) {
return null;
} try (
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(byteArrayOutputStream);
) { out.writeObject(obj);
return byteArrayOutputStream.toByteArray();
} } /**
* 反序列化
*
* @param bytes 对象序列化后的字节数组
* @return 反序列化后的对象
* @throws IOException
* @throws ClassNotFoundException
*/
public static Object deserialize(byte[] bytes) throws IOException, ClassNotFoundException {
if (null == bytes) {
return null;
} try (
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
ObjectInputStream in = new ObjectInputStream(byteArrayInputStream);
) { return in.readObject();
}
} /**
* 反序列化成指定类型的对象
*
* @param bytes 对象序列化后的字节数组
* @param c 反序列化后的对象类型
* @return 指定类型的对象
* @throws IOException
* @throws ClassNotFoundException
*/
public static <T> T deserialize(byte[] bytes, Class<T> c) throws ClassNotFoundException, IOException {
return c.cast(deserialize(bytes));
} public static void main(String[] args) {
try {
Map<String, Object> map = new HashMap<>();
map.put("name", "Logan");
map.put("age", 26); byte[] bytes = serialize(map);
Map<?, ?> map2 = deserialize(bytes, Map.class);
System.out.println(map2); System.out.println(map.equals(map2));
System.out.println(map == map2);
} catch (Exception e) {
e.printStackTrace();
}
} }

.

Java 序列化对象工具类的更多相关文章

  1. 对象工具类 - ObjectUtils.java

    对象工具类,提供对象克隆.获取对象属性.类型判断.Map转换对象.对象转Map.设置对象属性等. 源码如下:(点击下载 -  ObjectUtils.java .JsonUtils.java .gso ...

  2. Java多线程并发工具类-信号量Semaphore对象讲解

    Java多线程并发工具类-Semaphore对象讲解 通过前面的学习,我们已经知道了Java多线程并发场景中使用比较多的两个工具类:做加法的CycliBarrier对象以及做减法的CountDownL ...

  3. java格式处理工具类

    import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...

  4. java文件处理工具类

    import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedRead ...

  5. Java 序列化 对象序列化和反序列化

    Java 序列化 对象序列化和反序列化 @author ixenos 对象序列化是什么 1.对象序列化就是把一个对象的状态转化成一个字节流. 我们可以把这样的字节流存储为一个文件,作为对这个对象的复制 ...

  6. Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类

    Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ...

  7. 使用java的Calendar工具类获取到本月的第一天起始时间和最后一天结束时间。

    1.使用java的Calendar工具类获取到本月的第一天起始时间和最后一天结束时间. package com.fline.aic.utils; import java.text.DateFormat ...

  8. JAVA 8 日期工具类

    JAVA 8 日期工具类 主题描述 JAVA中日期时间的历史 代码成果 主题描述 JAVA的日期时间一直比较混乱,本来以为joda会是巅峰,但是JAVA 8改变了我的思想.但是即便在JAVA 8面前, ...

  9. JavaSE-基础语法(二)-系统类(java.lang.*)和工具类(java.util.*)

    系统类(java.lang.*)和工具类(java.util.*) 一.系统类(java.lang.*) 这个包下包含java语言的核心类,如String.Math.System和Thread类等,使 ...

随机推荐

  1. 21-----BBS论坛

    BBS论坛(二十一) 21.1.编辑轮播图功能完成 (1)cms_banners.html 把属性绑定到<tr>上面,方便找到各属性的值 <tbody> {% for bann ...

  2. 1.Exadata技术演进

    V1-v2 和 HP Exadata 2-2 和 SUN 2011 3-2 4-2 5-2 2014底 2-2 混合运算 2-8 是大数据运算         问题1. 随着系统规模增加,传统数据库架 ...

  3. python3 pip使用报错

     在windodws上pip3使用了很长时间,今天突然报错. Fatal error in launcher: Unable to create process using '"' 解决方案 ...

  4. Mybatis学习笔记15 - 两个内置参数_parameter和_databaseId

    两个内置参数:除了方法传递过来的参数可以被用来判断,取值外,mybatis默认还有两个内置参数: _parameter:代表整个参数 单个参数:_parameter就代表这个单个参数 多个参数:参数会 ...

  5. checkbox多选、全选js效果

    //全选checkbox function allCheck() { //全选input var all = $("input[name='all']"); //全部的input ...

  6. HDU - 6208 The Dominator of Strings HDU - 6208 AC自动机 || 后缀自动机

    https://vjudge.net/problem/HDU-6208 首先可以知道最长那个串肯定是答案 然后,相当于用n - 1个模式串去匹配这个主串,看看有多少个能匹配. 普通kmp的话,每次都要 ...

  7. 深入学习webpack(三)

    在前面两篇博客中,主要讲了webpack的使用和webpack的核心概念,他们都是非常重要的,在这篇博客中,讲主要讨论webpack配置相关问题. 参考文章:https://webpack.js.or ...

  8. java多线程通过管道流实现不同线程之间的通信

    java中的管道流(pipeStream)是一种特殊的流,用于在不同线程间直接传送数据.一个线程发送数据到输出管道,另外一个线程从输入管道中读取数据.通过使用管道,实现不同线程间的通信,而不必借助类似 ...

  9. EditPlus编写PHP使用技巧

    1,建立php模板 方法:在EditPlus的文件目录下,新建template.php文件,写入<?php ?>内容保存,再在editplus的模板中 载入应用即可. 2,建立函数自动补齐 ...

  10. ANDROID_HOME is not set and "android" command not in your PATH解决

    使用nodejs安装cordova后在项目里面添加平台时出现错误: 原因就是没有配环境变量 使用phonegap开发不仅要配JDK环境变量,还要配ADT环境变量,出现这个错误很显示就是没配ADT环境变 ...