6-对象流(对象的序列化)

  1 package com.io;
  2
  3 import java.io.File;
  4 import java.io.FileInputStream;
  5 import java.io.FileOutputStream;
  6 import java.io.IOException;
  7 import java.io.ObjectInputStream;
  8 import java.io.ObjectOutputStream;
  9 import java.io.Serializable;
 10
 11 import org.junit.Test;
 12
 13 /**
 14  *
 15  * 1、对象的序列化机制:把内存中的java对象转换成与平台无关的二进制流,
 16  * 持久地保存地磁盘上或通过网络传输到另一个节点
 17  * 2、反序列化: 当其它程序获取了这种二进制流以后,可以恢复成原来的对象
 18  *
 19  *
 20  */
 21 public class 对象流 {
 22     @Test
 23     public void objOutputStreamTest(){
 24         Person p1 = new Person("小明",22);
 25         Person p2 = new Person("小红",23);
 26
 27         ObjectOutputStream oos = null;
 28         try {
 29             oos = new ObjectOutputStream(new FileOutputStream(new File("obj.txt")));
 30             oos.writeObject(p1);
 31             oos.writeObject(p2);
 32             oos.flush();
 33         } catch (IOException e) {
 34             // TODO Auto-generated catch block
 35             e.printStackTrace();
 36         }finally{
 37             try {
 38                 oos.close();
 39             } catch (IOException e) {
 40                 e.printStackTrace();
 41             }
 42         }
 43     }
 44
 45     @Test
 46     public void readObject(){
 47         ObjectInputStream ois = null;
 48         try {
 49             ois = new ObjectInputStream(new FileInputStream(new File("obj.txt")));
 50
 51             Person p1 = (Person) ois.readObject();
 52             Object p2 = (Object)ois.readObject();
 53             System.out.println(p1);
 54             System.out.println(p2);
 55         } catch ( IOException e) {
 56             // TODO Auto-generated catch block
 57             e.printStackTrace();
 58         } catch (ClassNotFoundException e) {
 59             // TODO Auto-generated catch block
 60             e.printStackTrace();
 61         }finally{
 62             try {
 63                 ois.close();
 64             } catch (IOException e) {
 65                 // TODO Auto-generated catch block
 66                 e.printStackTrace();
 67             }
 68         }
 69     }
 70 }
 71
 72 /**
 73  *
 74  * @author Administrator
 75  *要实现序列化的类要求:
 76  *(1)类是可序列化的:实现Serializable接口
 77  *(2)类的属性是可序列化的,属性也继承Serializable接口
 78  *(3)使用static 和 transient关键字修饰的属性不可被序列化
 79  *(4)提供一个版本号serialVersionUID
 80  */
 81
 82
 83 /*
 84  * 凡是实现Serializable接口的类都有一个表示序列化版本标识符的静态变量:
 85 private static final long serialVersionUID;
 86 serialVersionUID用来表明类的不同版本间的兼容性
 87 如果类没有显示定义这个静态变量,它的值是Java运行时环境根据类的内部细节自动生成的。若类的源代码作了修改,serialVersionUID 可能发生变化。故建议,显示声明
 88 显示定义serialVersionUID的用途
 89 希望类的不同版本对序列化兼容,因此需确保类的不同版本具有相同的serialVersionUID
 90 不希望类的不同版本对序列化兼容,因此需确保类的不同版本具有不同的serialVersionUID
 91
 92  */
 93 class Person implements Serializable{
 94     /**
 95      *
 96      */
 97     private static final long serialVersionUID = -8305586168290840729L;
 98
 99     private String name ;
100
101     private int age;
102
103     public Person(String name,Integer age){
104         this.name = name;
105         this.age = age;
106     }
107
108     /* (non-Javadoc)
109      * @see java.lang.Object#toString()
110      */
111     @Override
112     public String toString() {
113         return "Person [name=" + name + ", age=" + age + "]";
114     }
115
116
117 }
时间: 2024-11-05 02:39:12

6-对象流(对象的序列化)的相关文章

对象流--对象的序列化

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

Java文件与io——打印流和对象流

打印流的主要功能是用于输出,在整个IO包中打印流分为两种类型: 字节打印流:PrintStream 字符打印流:PrintWriter 打印流可以很方便的进行输出 public class PrintStreamDemo { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub byteStreamOut(); charStreamOut(); } //Pr

JAVA笔记12__字节、字符缓冲流/打印流/对象流/

/** * !!:以后写流的时候一定要加入缓冲!! * 对文件或其它目标频繁的读写操作,效率低,性能差. * 缓冲流:好处是能更高效地读写信息,原理是将数据先缓冲起来,然后一起写入或读取出来. * * BufferedInputStream:字节缓冲流(有一个内部缓冲区数组,用于缓冲数据) */ public class Main { public static void main(String[] args) { input(); output(); } /** * 使用字节缓冲流进行读取操作

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

笔记:I/O流-对象序列化

Java 语言支持一种称为对象序列化(Object Serialization)的非常通用的机制,可以将任何对象写入到流中,并在之后将其读回,首先需要支持对象序列化的类,必须继承与 Serializable 接口,该接口没有任何方法,只是对类起到标记的作用,然后使用 ObjectOutputStream 流来序列化对象,使用 ObjectInputStream 流来反序列化,示例代码如下: 对象类声明: public class Employee implements Serializable

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

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

Java序列化与对象流浅谈

今晚又重新回顾了Java中序列化与对象流的知识,接触了一位有着上亿行有效代码量的大佬之思想,2333. 1.序列化与反序列化 Java中的序列化简而言之就是为了避免要重复使用的实例在每次执行程序过程中都要重新申请堆空间,序列化后直接加载,节约时间.序列化过程中,保存在文件中的对象只记录了对象的状态(属性),包括成员和类类型(名称),而不会存储对象的方法.可看做将一个有着灵魂的人进行灵魂转移,转移的只是他的记忆,他自己的各种行为,比如吃饭.睡觉--,每个人都拥有,且行为表现一样,即只需转移(保存)

【C#小知识】C#中一些易混淆概念总结(九)---------异常,文件流对象,.NET序列化,多线程

终于有时间来完成这个系列的最后一篇关于C#中异常,文件流对象,序列化,多线程问题的总结. 首先就来看关于异常的相关知识吧 一,异常 首先区分三个概念:警告,异常和错误.不管对于编程新手或者是老手对这三个概念都应该是非常熟悉,且是经常遇到的. 警告:在程序中出现,对于程序的执行没有影响. 异常:在运行的时候发生,一旦发生程序就会停止. 错误:一直是 指程序不符合语法规范. 在C#中的标准抛出异常的语句如下: try { //尝试执行的语句 } catch (Exception) { //抛出异常的

黑马程序员——Java基础——IO流(三)—对象的序列化(持久化),管道流,操作基本数据类型的流对象

第一讲 对象序列化(持久化) 概述: 将堆内存中的对象存入硬盘,以包括对象的数据,称为持久化或序列化 使用的类:ObjectInputStream和ObjectOutputStream 特有方法: ObjectInputStream Object readObject():读取 ObjectOutputStream void writeObject(obj):写入 1 /* 2 * 需求:将一个对象序列化,并从硬盘中读取序列化的对象 3 * 4 */ 5 import java.io.*; 6

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

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