java入门 -- 对象的序列化和反序列化

/*

* 对象的输入输出流:

* 作用:用于写对象的信息与读取对象的信息,对象信息一旦写到文件上那么对象的信息就可以做到持久化了。

* 对象的输出流:

* ObjectOutputStram

* 使用步骤:

*  1.定位要输出的文件位置;

*  2. 定义输入字节流通道:

*  3. 定义对象输出通道:

*  4.输入对象信息:

*  5.关闭资源;

* 对象的输入流:

* ObjectInputStream

* 使用步骤:

* 1.定义要输入的文件的对象信息文件位置;

*  2.定义输入字节流通道:

*  3.定义对象输入通道;

*  4.读取对象信息;

*  5.关闭资源;

*

*  *  注意事项:

*  1. 如果对象需要被写入到文件中,那么对象必须实现Serializable接口,Serializable接口没有任何方法,是一个标识接口;

*  所有的集合类都实现了该接口;

*  2.对象的反序列化不会调用构造方法;

*  3. serialVersionUID 是用于记录class文件的版本信息的,serialVersionUID是通过类名、成员名、报名和工程名算出来的数字。

*  4.如果反序列化使用了ObjectInputStream反序列化的时候,ObjectInputStream 会先读取文件的serialVersionUID,然后与本地的class文件的serialVersionUID

*  进行对比,如果id不一致,那么反序列化就会失败;

*  5.如果序列化与反序列化的时候可能修改类的成员,那么最好最开始就给这个类指定一个serialVersionUIG,如果类的serialVersionUID指定了,俺么在序列化

*  和反序列化的时候,jvm就不会再计算serialVersionUID;

*

*  6.成员前面加上transient关键字,该成员就不会被写出了、

*  7.如果要给类中的成员是另一个类的引用,那么该类也要实现Serializable,才能够被写入;

*/

package com.michael.lin;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.io.Serializable;

class User implements Serializable{

String userName; //用户民

String password; //密码

public User(String userName, String password){

this.userName = userName;

this.password = password;

}

@Override

public String toString() {

// TODO Auto-generated method stub

return "用户名" + this.userName + "密码" + this.password;

}

}

public class Demo03 {

public static void main(String[] args) throws IOException, ClassNotFoundException{

//把User的对象持久化存储

writeObj();

readObj();

}

//把对象的信息写入到硬盘上 --> 对象的序列化

public static void writeObj() throws IOException{

User user = new User("michael", "123");

//找到目标文件

File file = new File("g:\\obj.txt");

//建立文件输出流通道

FileOutputStream fileOutputStream = new FileOutputStream(file);

//建立对象输出流通道

ObjectOutputStream objOutputStream = new ObjectOutputStream(fileOutputStream);

//对象输出

objOutputStream.writeObject(user);

objOutputStream.close();

}

//对象的反序列化,把文件中的对象信息读取出来

public static void readObj() throws IOException, ClassNotFoundException{

//1.定义对象信息文件袋饿位置

File file = new File("g:\\obj.txt");

//2.定义输出文件字节流:

FileInputStream fileInputStream = new FileInputStream(file);

//3.定义对象输出通道

ObjectInputStream objInputStream = new ObjectInputStream(fileInputStream);

//4.读取对象信息;

System.out.println(objInputStream.readObject());

//5.关闭资源

objInputStream.close();

}

}

你可能感兴趣的:(java入门 -- 对象的序列化和反序列化)