`
heimeiyingwang
  • 浏览: 94162 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

corejava辅导(14--1)

阅读更多

ObjectInputStreamObjectOutputStream(对象流)

 

对象流是过滤流,需要节点流作参数来构造对象。用于直接把对象写入文件和从文件读取对象。只有实现了Serializable接口的类型的对象才可以被读写,Serializable接口是个标记接口,其中没有定义方法。对象会序列化成一个二进制代码。

 

writeObject(o) Object readObject()这两个是对象读写操作时用的方法。

 

     Object o = new Object();   

     FileOutputStream fos=new FileOutputStream("Object.txt");

     ObjectOutputStream oos=new ObjectOutputStream(fos);

     oos.writeObject(o);

     oos.close();

 

     FileInputStream fis =new FileInputStream(“Object.txt”);

     ObjectInputStream ois =new ObjectInputStream(fis);

     Object o = (Object)Ois.readObject();

     ois.close();

 

对象流读取结束返回 EOFException异常对象。

一个类中有其他类型的对象,那么,这个类实现了Serializable接口,在对象序列化时,也同样要求这个类中属性都能够对象序列化(基本类型除外)。

 

注意:对于对象流的操作,在写对象时要一次写入完毕,如果使用追加模式写入,只会读取到上一次写入的对象,使用对象流写入时,会先写入一个头部,然后写入数据,最后加上结束符号,如果使用追加方式写入的话,那就会在结束符号继续向下写入,但是在读取时只会读到结束符为止,以后再次写入的数据就会丢失。

 

注意:在使用对象流写入对象时要一次向文件写入,不能够采用追加方式。

 

serialver命令判断是否一个属性或对象可序列化,

serialver TestObjectTestObject必须为已经编译,也就是.class

执行结果:如果不可序列化;则出现不可序列化的提示。如果可以序列化,那么就会出现序列化的IDUID

 

Externalizable这是Serializable的子接口,他可以让用户自定义如何序列化对象。

readExternal(ObjectInput in)writeExternal(ObjectOutput out)这是这个接口中的两个方法,通过这两个方法可以定制序列化过程。这个方法不安全,可以调用以上两个方法改变对象的状态。

 

transient只能用来修饰属性。表示这个属性在对象序列化时将被忽略。

transient int num;

表示当我们对属性序列化时忽略这个属性(即忽略不使之持久化)。所有属性必须都是可序列化的,特别是当有些属性本身也是对象的时候,要尤其注意这一点。

 

 

java.util.StringTokenizer类,这个类是用于字符串截取的。

StringTokenizer(参数1,参数2按某种符号隔开文件

StringTokenizer(s,”:”) 隔开字符,s为对象。

 

补充:字节流结束返回-1,字符流结束返回null,对象流结束返回 EOFException

引申---------〉异常经常被用在流程控制, 异常也是方法的一种返回形式。

例:

import java.io.*;

public class TestObjectStream {

     public static void main(String[] args) throws Exception{

         // TODO Auto-generated method stub

         FileOutputStream fo=new FileOutputStream("student.dat");

         ObjectOutputStream out=new ObjectOutputStream(fo);

         Student s=new Student(20,"Liucy");

         out.writeObject(s);

        

         out.close();

        

         FileInputStream fi=new FileInputStream("student.dat");

         ObjectInputStream in=new ObjectInputStream(fi);

         Object o=in.readObject();

        

         System.out.println(o);

        

 

     }

 

}

 

class Student implements Serializable {

     transient int age;

     String name;

     public Student(int age, String name) {

         super();

         // TODO Auto-generated constructor stub

         this.age = age;

         this.name = name;

     }

     public int getAge() {

         return age;

     }

     public void setAge(int age) {

         this.age = age;

     }

     public String getName() {

         return name;

     }

     public void setName(String name) {

         this.name = name;

     }

     public String toString(){

         return "Student "+this.name+" age="+this.age;

     }

}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics