您的位置:首页 > 编程语言 > Java开发

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 例
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: