java.io 与对象序列化 笔记
2013-05-14 18:47
501 查看
①序列化对象写入文件(Serializaiton):
对象序列化之前,它的类要被声明为Serializable(实现 Serializable 的接口):public class aa implements Serializable{private int c;public void getC(){ return c;}
import java.io.*FileOutpurStream fs=new FileOutputStream("aaaa.ser");//如果文件不存在,会被在当前目录创建//这里可以是相对路径,也可以是绝对路径 如C://user/xiaojing/desktop/xiaojing.txt ,注意斜杠的方向与系统默认的不同,不然无法解析ObjectOutputStream os=new ObjectOutputStream(fs);//两个输出流相连接,共同作用//ObjectOutStream把对象写成串流//FileOutputStream把对象写成的串流编译成字节码os.writeObject(a);//a 是一个对象//将a序列化并写入aaaa.ser文件os.close();注:1.序列化过程中,对象中的其他被创建的对象的类都必须实现Serializable,除非对象被声明为transient(瞬时的)2.static变量是每个类享有一个,故不会被序列化②解序列化(Deserialization),对象的还原FileInputStream fs=new FileInputStream("aaaa.ser")//如果文件不存在,会抛出异常 FileNotFoundExceptionObjectInputStream os=new ObjectInputStream(fs);Object one=os.readObject();//Object two=os.readObject();//会按顺序一个个读出对象,超过次数会抛出异常aa cd=(aa) one;(由于返回值是Object 类型,所以要强制转换为aa类)os.close();注:1.解序列化过程中,如果JAVA虚拟机找不到或无法加载要还原的对象的类,则会抛出异常,ClassNotFoundException2.新的对象会被配置在堆上,但该类的构造函数不会被执行(直接根据保存的信息还原对象,如果构造函数被执行了,就是个新的对象,不能保存原有的数据)3.继承树上如果有不可序列化的祖先类,则可序列化的祖先类(一直到第一个不可序列化的祖先类)将被按保存的文件还原,不可序列化的祖先类及以上调用其构造函数4.被声明为transient的实例变量会被赋值为NULL,或primitive主数据类型被默认为0,"' ,false 等
③ 字符串写入文本文件import java.io.*;
FileWriter writer = new FileWriter(''aaaaa.txt'');//同样相对路径默认保存在workspace 下,也可为绝对路径,不过'\'要转换为'/'
writer.write("wo xiang chi chashaofan");
writer.close();
④ 缓冲区[/b]BufferedWriter writer = new BufferedWriter(new FileWriter(aFile)); BufferedReader reader = new BufferedReader(new FileReader(myFile)); writer.close();reader.close();reader.readLine() 缓冲区有内容时返回内容(String),没有时返回NULLwriter.flush() 可以强制把缓冲区的内容写入 ⑤serialVersionUID 对象序列化的同时对象会被盖上个版本印章类某方面变化,版本号就会变化可以设置其不可变用JAVA Development Kit 里面的serialver 可以取得类当前的版本号在类中声明static final long serialVersionUID=-153243459248(得到的一个很长的值),可以使版本号不变
以下是Head Fisrt Java 中的一个序列化例子:QuizCard 例
对象序列化之前,它的类要被声明为Serializable(实现 Serializable 的接口):public class aa implements Serializable{private int c;public void getC(){ return c;}
import java.io.*FileOutpurStream fs=new FileOutputStream("aaaa.ser");//如果文件不存在,会被在当前目录创建//这里可以是相对路径,也可以是绝对路径 如C://user/xiaojing/desktop/xiaojing.txt ,注意斜杠的方向与系统默认的不同,不然无法解析ObjectOutputStream os=new ObjectOutputStream(fs);//两个输出流相连接,共同作用//ObjectOutStream把对象写成串流//FileOutputStream把对象写成的串流编译成字节码os.writeObject(a);//a 是一个对象//将a序列化并写入aaaa.ser文件os.close();注:1.序列化过程中,对象中的其他被创建的对象的类都必须实现Serializable,除非对象被声明为transient(瞬时的)2.static变量是每个类享有一个,故不会被序列化②解序列化(Deserialization),对象的还原FileInputStream fs=new FileInputStream("aaaa.ser")//如果文件不存在,会抛出异常 FileNotFoundExceptionObjectInputStream os=new ObjectInputStream(fs);Object one=os.readObject();//Object two=os.readObject();//会按顺序一个个读出对象,超过次数会抛出异常aa cd=(aa) one;(由于返回值是Object 类型,所以要强制转换为aa类)os.close();注:1.解序列化过程中,如果JAVA虚拟机找不到或无法加载要还原的对象的类,则会抛出异常,ClassNotFoundException2.新的对象会被配置在堆上,但该类的构造函数不会被执行(直接根据保存的信息还原对象,如果构造函数被执行了,就是个新的对象,不能保存原有的数据)3.继承树上如果有不可序列化的祖先类,则可序列化的祖先类(一直到第一个不可序列化的祖先类)将被按保存的文件还原,不可序列化的祖先类及以上调用其构造函数4.被声明为transient的实例变量会被赋值为NULL,或primitive主数据类型被默认为0,"' ,false 等
③ 字符串写入文本文件import java.io.*;
FileWriter writer = new FileWriter(''aaaaa.txt'');//同样相对路径默认保存在workspace 下,也可为绝对路径,不过'\'要转换为'/'
writer.write("wo xiang chi chashaofan");
writer.close();
④ 缓冲区[/b]BufferedWriter writer = new BufferedWriter(new FileWriter(aFile)); BufferedReader reader = new BufferedReader(new FileReader(myFile)); writer.close();reader.close();reader.readLine() 缓冲区有内容时返回内容(String),没有时返回NULLwriter.flush() 可以强制把缓冲区的内容写入 ⑤serialVersionUID 对象序列化的同时对象会被盖上个版本印章类某方面变化,版本号就会变化可以设置其不可变用JAVA Development Kit 里面的serialver 可以取得类当前的版本号在类中声明static final long serialVersionUID=-153243459248(得到的一个很长的值),可以使版本号不变
以下是Head Fisrt Java 中的一个序列化例子:QuizCard 例
相关文章推荐
- 12. JAVA IO Part 4 (对象的序列化) ----- 学习笔记
- Java学习笔记——IO操作之对象序列化及反序列化
- [零散篇]Java学习笔记---Java的对象序列化以及文件IO处理
- Java学习笔记之IO(十三):对象的序列化和反序列化
- JavaIO 总结笔记<五> 打印流、Properties类、对象流、序列化
- 【JAVA IO】_对象序列化笔记
- 【JAVA IO】_对象序列化笔记
- Java笔记5 IO<4>对象的序列化、管道流
- 【JAVA IO】_对象序列化笔记
- 你不知道的Java学习笔记19-- 对象序列化
- 黑马程序员——java之IO体系中File类、编码问题、对象序列化
- Java IO--对象序列化Serializable、ObjectOutputStream、ObjectInputStream、transient
- java对象序列化学习笔记(z)
- 【Java】IO操作之对象序列化及反序列化
- Java的IO操作(三) - 对象的序列化、ObjectInputStream和ObjectOutputStream类
- 『黑马程序员』---java--IO--对象序列化-管道流
- 对象反序列化时,抛出java.io.StreamCorruptedException: invalid type code: AC异常
- java对象序列化学习笔记(zz)
- java 学习笔记11之对象序列化
- Java IO流与对象IO序列化