- /**
- * 对象输入输出流ObjectOutputStream和ObjectInputStream,可以直接把Java对象作为
- * 存储,传输的对象写入文件,在网络上传输,避免了存储字节的操作
- *
- * 对象序列化是一种使Java对象能够被存储和传输的机制
- * 解决"包含对象引用"情况下对象的存储和传输,避免重复写入
- * 对象序列化,利用transient改变默认的序列化机制
- * */
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- public class TestSerializable {
- public static void main(String[] args) throws IOException,
- ClassNotFoundException {
- File myObjectFile = new File("myobject");
- ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(
- myObjectFile));
- MyObject myObject = new MyObject(0, "Tom");
- oos.writeObject(myObject);
- oos.close();
- ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
- myObjectFile));
- MyObject myObject1 = (MyObject) ois.readObject();
- System.out.println("no=" + myObject1.getNo() + ";name="+ myObject1.getName());
- ois.close();
- }
-
}
- /**
- * 没有实现Serializable接口的类的实例,不能机基于对象输入输出流进行存取
- * 否则抛出java.io.NotSerializableException异常
- * Java对象及起属性(简单类型除外)必须实现Serializable接口,这个对象才能序列化
- * */
- import java.io.Serializable;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.io.IOException;
- public class MyObject implements Serializable {//Serializable接口没有定义任何方法
- private int no = 0;
- transient private String name = null;//被对象输出流读出,在字符串后面加...
- public MyObject(int no, String name) {
- this.no = no;
- this.name = name;
- }
- public void setNo(int no) {
- this.no = no;
- }
- public int getNo() {
- return this.no;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getName() {
- return this.name;
- }
- private void writeObject(ObjectOutputStream out) throws IOException {
- out.defaultWriteObject();
- out.writeObject(this.name);
- }
- private void readObject(ObjectInputStream in) throws IOException,
- ClassNotFoundException {
- in.defaultReadObject();
- this.name = (String) in.readObject() + "...";
- }
- }