使用序列化和对象流实现对象的序列化

1 目标对象的类要实现 Serializable 接口
  其成员若是引用类型 也必须实现Serializable 接口
  若某个成员不需要序列化 transient

2 这个类可以实现复杂对象图的深度复制

 1 import java.io.ByteArrayInputStream;
 2 import java.io.ByteArrayOutputStream;
 3 import java.io.ObjectInputStream;
 4 import java.io.ObjectOutputStream;
 5 import java.io.Serializable;
 6
 7 public class DeepCopy {
 8
 9     /**
10      * 深度复制,复制的整个对象图
11      *
12      * 要求:目标要实现了序列化的接口
13               transient修饰的属性由于不能被序列化 所以不会被克隆
14      */
15     public static Serializable deeplyCopy(Serializable src){
16
17         try {
18
19             ByteArrayOutputStream baos = new ByteArrayOutputStream();
20             ObjectOutputStream oos = new ObjectOutputStream(baos);
21
22             oos.writeObject(src);
23             oos.close();
24             baos.close();
25
26             byte[] bytes = baos.toByteArray();
27             ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
28             ObjectInputStream ois = new ObjectInputStream(bais);
29             Serializable copy = (Serializable) ois.readObject();
30             ois.close();
31             bais.close();
32
33             return copy ;
34
35         } catch (Exception e) {
36             e.printStackTrace();
37         }
38
39         return null ;
40     }
41
42 }
时间: 2024-11-05 14:33:03

使用序列化和对象流实现对象的序列化的相关文章

使用SharedPreference和对象流存储对象

编写PreferencesUtils工具类可以简单对象(可以缓存对象中所有public的简单属性) 另外研究了Preference存储与直接采用对象文件缓存方式的区别 第一次写文件时 1.效率,直接缓存对象文件比Preference快 2.大小,直接缓存对象文件比Preference文件小 3.缓存目录不同,Preference缓存在shared_prefs下,对象文件则根据我们的设置可以选择目录 在设置中有两个操作 清除缓存:会将data/应用程序/caches目录下的文件删除 清除数据:会将

Java 对象流(输入-输出)objectoutputstream序列化报错

报错:java.io.notserializableexception 解决方法:添加下面代码实现 对象类 1 package com.etc._07ObjectDemo; 2 3 import java.io.Serializable; 4 5 public class Person implements Serializable { 6 private int id; 7 private String name; 8 private String sex; 9 public int getI

[疯狂Java]I/O:I/O流的最高境界——对象流(序列化:手动序列化、自动序列化、引用序列化、版本)

1. 什么是对象流:序列化/反序列化的概念 1) 对象流是和字节流/字符流同处于一个概念体系的: a. 这么说字节流是流动的字节序列,字符流是流动的字符序列,那么对象流就是流动的对象序列咯? b. 概念上确实可以这样理解,对象流就是专门用来传输Java对象的: c. 但是字节和字符都是非常直观的二进制码(字节本身就是,而字符是一种二进制编码),二进制码的流动是符合计算机的概念模型的,可是对象是一个抽象的东西,对象怎么能像二进制码那样流动呢? d. 其实很好理解,对象流只不过是Java的API而已

对象流

对象流: 对象进行序列化(解释一): 所谓对象序列化就是将对象的状态转换成字节流,以后可以通过这些值(字节序列)再生成相同状态的对象. 对象序列化(解释二):        当需要传输对象时,由于对象是很多属性和行为的封装,数据量很庞大.所以在传输对象之前需要将对象打散成字节序列,以利于传输,这个过程 称为序列化过程.到达目的地以后,又需要将字节序列还原成对象,这个过程称为反序列化过程. 如何实现序列化:       将需要传输的类,实现java.io.Serializable.这意味着该类的对

第二十六节(对象流,File类)

对象流可以将 Java 对象转换成二进制写入磁盘,这个过程通常叫做序列化,并且还可 以从磁盘读出完整的 Java 对象,而这个过程叫做反序列化. 对象流主要包括:ObjectInputStream 和 ObjectOutputStream 如何实现序列化和反序列化 如果实现序列化该类必须实现序列化接口 java.io. Serializable , 该接口没有任何方法, 该接口 只是一种标记接口,标记这个类是可以序列化的 /* 对象流: 对象流可以将java对象转换成二进制写入磁盘,这个过程叫做

Java IO详解(六)------序列化与反序列化(对象流)

File 类的介绍:http://www.cnblogs.com/ysocean/p/6851878.html Java IO 流的分类介绍:http://www.cnblogs.com/ysocean/p/6854098.html Java IO 字节输入输出流:http://www.cnblogs.com/ysocean/p/6854541.html Java IO 字符输入输出流:https://i.cnblogs.com/EditPosts.aspx?postid=6859242 Jav

对象流--对象的序列化

1.对象是存在于内存中的(堆内存),有时候我们需要将对象保存在硬盘上,又有时我们需要将对象保存在另一台计算机上等等这样的操作, 这时候我们需要将对象转化为一个字节序列,而这个过程就是对象的序列化,相反我么又这样一个字节序列需要将其转化为对应的对象, 这个过程就是对象的反序列化. 2.对象-----序列化---字节序列 字节序列---反序列化---对象 3.使用OOS实现对象的序列化------ObjectOutputStream是用来对对象进行序列化的输出流, 其实现对象序列化的方法为:  -v

黑马程序猿——25,打印流,合并流,对象序列化,管道流,RandomAccessFile

------<ahref="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 黑马程序猿--25.打印流.合并流.对象序列化,管道流,RandomAccessFile /* IO流的打印流:专门用于打印的流 字节打印流PrintStream PrintStream的构造函数能够接收file对象,String型字符串路

动车上的书摘-java对象流与序列化

动车上的书摘-java对象流与序列化 摘要: 摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢! 钢笔不限贵便宜,书法是来自心对手的交流.-泥沙砖瓦浆木匠 一.对象序列化 当需要存储相同类型的数据,选择固定的长度记录是好选择.但是在面向对象(OOP)程序中,对象之间很少有全部相同的类型.所以,java语言支持一种称为对象序列化(object serialization)的机制. 下面展示一个序列化例子,关于两个对象 Em