序列化之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,如需转载请自行联系原作者





相关文章
|
11天前
|
NoSQL Java 数据库连接
深入探索 Java 后台开发的核心技术
【4月更文挑战第5天】本文探讨了Java后台开发的关键技术,包括Spring框架与Spring Boot的使用,MyBatis和Hibernate的ORM选择,关系型与NoSQL数据库的适用场景,线程池与异步处理在并发中的作用,微服务架构及RESTful API设计。这些核心技术有助于开发者打造稳定、高性能的Java后台系统,适应不断发展的云计算和人工智能需求。
|
18天前
|
存储 SQL Java
【Java技术指南】「JPA编程专题」让你不再对JPA技术中的“持久化型注解”感到陌生了(二)
【Java技术指南】「JPA编程专题」让你不再对JPA技术中的“持久化型注解”感到陌生了
41 1
|
18天前
|
缓存 Java C#
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍(一)
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍
57 0
|
3天前
|
存储 Java
Java输入输出:解释一下序列化和反序列化。
Java中的序列化和反序列化是将对象转换为字节流和反之的过程。ObjectOutputStream用于序列化,ObjectInputStream则用于反序列化。示例展示了如何创建一个实现Serializable接口的Person类,并将其序列化到文件,然后从文件反序列化回Person对象。
14 5
|
18天前
|
存储 安全 Java
【Java技术专题】「攻破技术盲区」攻破Java技术盲点之unsafe类的使用指南(打破Java的安全管控— sun.misc.unsafe)
【Java技术专题】「攻破技术盲区」攻破Java技术盲点之unsafe类的使用指南(打破Java的安全管控— sun.misc.unsafe)
32 0
|
18天前
|
存储 安全 Java
【Java技术专题】「Guava开发指南」手把手教你如何进行使用Guava工具箱进行开发系统实战指南(不可变集合篇)
【Java技术专题】「Guava开发指南」手把手教你如何进行使用Guava工具箱进行开发系统实战指南(不可变集合篇)
27 1
|
18天前
|
Java API Apache
【Java技术专题】「Guava开发指南」手把手教你如何进行使用Guava工具箱进行开发系统实战指南(基础编程篇)
【Java技术专题】「Guava开发指南」手把手教你如何进行使用Guava工具箱进行开发系统实战指南(基础编程篇)
43 0
|
27天前
|
JSON 前端开发 Java
|
27天前
|
人工智能 安全 Java
Java中的并发编程技术与挑战
在当今软件开发领域,多核处理器和大规模分布式系统的普及使得并发编程技术变得日益重要。本文将深入探讨Java中的并发编程技术,包括多线程、同步机制、并发集合等内容,并针对其中的挑战进行分析和解决方案的探讨。