序列化之Java默认序列化技术(ObjectOutputStream与ObjectInputStream)

简介:

Java默认序列化技术

    主要是通过

  • 对象输出流java.io.ObjectOutputStream

  • 对象输入流java.io.ObjectInputStream

    来实现的

       

1
2
3
4
5
6
7
8
9
package  com.xingej.ser;
 
public  interface  ISerializer {
     // 序列化,将obj序列化成字节数组
     public  <T>  byte [] serialize(T obj);
 
     // 反序列化,将字节数组,反序列化为T
     public  <T> T deserialize( byte [] data, Class<T> clazz);
}

实现类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package  com.xingej.ser.impl;
 
import  java.io.ByteArrayInputStream;
import  java.io.ByteArrayOutputStream;
import  java.io.IOException;
import  java.io.ObjectInputStream;
import  java.io.ObjectOutputStream;
 
import  com.xingej.ser.ISerializer;
 
public  class  DefaultJavaSerializer  implements  ISerializer {
 
     public  <T>  byte [] serialize(T obj) {
         // 默认创建的是32个字节
         ByteArrayOutputStream bos =  new  ByteArrayOutputStream();
 
         ObjectOutputStream oos =  null ;
 
         try  {
                 // 对字节输出流进行封装
             oos =  new  ObjectOutputStream(bos);
 
             // 通过writeObject,将obj对象进行序列化到了bos里
             oos.writeObject(obj);
         catch  (IOException e) {
             e.printStackTrace();
         }
 
         return  bos.toByteArray();
     }
 
     @SuppressWarnings ( "unchecked" )
     public  <T> T deserialize( byte [] data, Class<T> clazz) {
         // 将字节数组,转换成输入流
         ByteArrayInputStream bis =  new  ByteArrayInputStream(data);
 
         ObjectInputStream ois =  null ;
 
         Object object =  null ;
 
         try  {
             // 将字节输入流 转换成 对象输入流
             ois =  new  ObjectInputStream(bis);
 
             // 这样的话,就可以通过ObjectInputStream的readObject方法
             // 直接读取对象了
             object = ois.readObject();
         catch  (Exception e) {
             e.printStackTrace();
         }
 
         return  (T) object;
     }
 
}

进行测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package  com.xingej.ser.client;
 
import  com.xingej.ser.ISerializer;
import  com.xingej.ser.impl.DefaultJavaSerializer;
 
/**
  * 对java默认序列化进行测试
 
  */
public  class  Driver {
     public  static  void  main(String[] args) {
         String name =  "spark" ;
         ISerializer serializer =  new  DefaultJavaSerializer();
 
         // 序列化
         byte [] nameSer = serializer.serialize(name);
 
         // 反序列
         Object object = serializer.deserialize(nameSer, String. class );
 
         System.out.println( "---序列化--->:\t"  + object);
     }
}


















本文转自故新51CTO博客,原文链接: http://blog.51cto.com/xingej/1959729,如需转载请自行联系原作者





相关文章
|
20天前
|
NoSQL Java 数据库连接
深入探索 Java 后台开发的核心技术
【4月更文挑战第5天】本文探讨了Java后台开发的关键技术,包括Spring框架与Spring Boot的使用,MyBatis和Hibernate的ORM选择,关系型与NoSQL数据库的适用场景,线程池与异步处理在并发中的作用,微服务架构及RESTful API设计。这些核心技术有助于开发者打造稳定、高性能的Java后台系统,适应不断发展的云计算和人工智能需求。
|
26天前
|
缓存 Java C#
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍(一)
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍
70 0
|
6天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
7天前
|
存储 数据可视化 安全
Java全套智慧校园系统源码springboot+elmentui +Quartz可视化校园管理平台系统源码 建设智慧校园的5大关键技术
智慧校园指的是以物联网为基础的智慧化的校园工作、学习和生活一体化环境,这个一体化环境以各种应用服务系统为载体,将教学、科研、管理和校园生活进行充分融合。无处不在的网络学习、融合创新的网络科研、透明高效的校务治理、丰富多彩的校园文化、方便周到的校园生活。简而言之,“要做一个安全、稳定、环保、节能的校园。
33 6
|
8天前
|
监控 前端开发 算法
Java技术体系
Java技术体系(韩顺平老师整理)
9 0
|
11天前
|
存储 Java
Java输入输出:解释一下序列化和反序列化。
Java中的序列化和反序列化是将对象转换为字节流和反之的过程。ObjectOutputStream用于序列化,ObjectInputStream则用于反序列化。示例展示了如何创建一个实现Serializable接口的Person类,并将其序列化到文件,然后从文件反序列化回Person对象。
18 5
|
19天前
|
存储 安全 Java
Java中实现高效的字符串拼接技术
【4月更文挑战第6天】在Java编程中,字符串拼接是一个常见的操作。然而,由于字符串的不可变性,频繁的拼接操作可能会导致性能问题。本文将探讨Java中实现高效字符串拼接的技术,包括使用StringBuilder类、StringBuffer类以及Java 8中的StringJoiner类。通过对比这些技术的优缺点,我们将为您提供在不同场景下选择合适的字符串拼接方法的建议。
|
26天前
|
存储 安全 Java
【Java技术专题】「攻破技术盲区」攻破Java技术盲点之unsafe类的使用指南(打破Java的安全管控— sun.misc.unsafe)
【Java技术专题】「攻破技术盲区」攻破Java技术盲点之unsafe类的使用指南(打破Java的安全管控— sun.misc.unsafe)
34 0
|
26天前
|
编解码 算法 安全
【Java技术专题】「入门到精通系列」深入探索Java技术中常用到的六种加密技术和实现
【Java技术专题】「入门到精通系列」深入探索Java技术中常用到的六种加密技术和实现
44 0
|
26天前
|
存储 安全 Java
【Java技术专题】「Guava开发指南」手把手教你如何进行使用Guava工具箱进行开发系统实战指南(不可变集合篇)
【Java技术专题】「Guava开发指南」手把手教你如何进行使用Guava工具箱进行开发系统实战指南(不可变集合篇)
30 1