java.io 与对象序列化 笔记
来源:互联网 发布:青蜂网络 编辑:程序博客网 时间:2024/05/23 11:51
①序列化对象写入文件(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")
//如果文件不存在,会抛出异常 FileNotFoundException
ObjectInputStream os=new ObjectInputStream(fs);
Object one=os.readObject();
//Object two=os.readObject();
//会按顺序一个个读出对象,超过次数会抛出异常
aa cd=(aa) one;(由于返回值是Object 类型,所以要强制转换为aa类)
os.close();
注:
1.解序列化过程中,如果JAVA虚拟机找不到或无法加载要还原的对象的类,则会抛出异常,ClassNotFoundException
2.新的对象会被配置在堆上,但该类的构造函数不会被执行(直接根据保存的信息还原对象,如果构造函数被执行了,就是个新的对象,不能保存原有的数据)
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();
④ 缓冲区
BufferedWriter writer = new BufferedWriter(new FileWriter(aFile));
BufferedReader reader = new BufferedReader(new FileReader(myFile));
writer.close();
reader.close();
reader.readLine() 缓冲区有内容时返回内容(String),没有时返回NULL
writer.flush() 可以强制把缓冲区的内容写入
⑤serialVersionUID
对象序列化的同时对象会被盖上个版本印章
类某方面变化,版本号就会变化
可以设置其不可变
用JAVA Development Kit 里面的serialver 可以取得类当前的版本号
在类中声明static final long serialVersionUID=-153243459248(得到的一个很长的值),可以使版本号不变
以下是Head Fisrt Java 中的一个序列化例子:QuizCard 例
- java.io 与对象序列化 笔记
- 【JAVA IO】_对象序列化笔记
- 【JAVA IO】_对象序列化笔记
- 【JAVA IO】_对象序列化笔记
- Java IO流与对象IO序列化
- Java IO流与对象IO序列化
- Java IO流与对象IO序列化(转)
- Java IO 对象的序列化与反序列化
- Java的IO流与对象的序列化浅谈
- 警告@SuppressWarnings("serial")与对象序列化(Java IO)
- java IO笔记(序列化与ObjectInputStream、ObjectOutputStream)
- python的io 与java的io流的使用及对象的序列化
- Java IO _对象序列化
- Java IO _对象序列化
- Java IO _对象序列化
- Java IO流(对象序列化)
- 对象的序列化与反序列化---IO学习笔记(四)
- java笔记九:对象序列化与反序列化
- linux系统编程之文件与I/O(六):fcntl 函数与文件锁
- 关于Java性能的9个谬论
- Android SDK下载与在eclipse中的安装(菜鸟来讲超慢易理解版)
- Win7系统设置Wifi热点(非原创)
- JAVA程序输出到.txt文件的换行符处理
- java.io 与对象序列化 笔记
- JAVA中private protected public 修饰符及JAVA默认修饰符(default acess)
- JAVA Socket 网络联机 客户端 服务端 笔记
- Building your own toolchain
- JAVA 多线程 笔记
- JAVA.util.Collections List的常用方法,sort()
- Java.util.Collections.sort(List l) 排序 [implements Comparable]
- JAVA 泛型(generic)
- JAVA 里的数据结构 Set List Map