{
try
{ //添加方式创建文件输出流
FileOutputStream fout = new FileOutputStream(fname,true);
DataOutputStream dout = new DataOutputStream(fout);
dout.writeInt(this.number);
dout.writeChars(this.name+"\n");
dout.close();
}
catch (IOException ioe){}
}
static void display(String fname)
{
try
{
FileInputStream fin = new FileInputStream(fname);
DataInputStream din = new DataInputStream(fin);
int i = din.readInt();
while (i!=-1) //输入流未结束时
{
System.out.print(i+" ");
char ch ;
while ((ch=din.readChar())!='\n') //字符串未结束时
System.out.print(ch);
System.out.println();
i = din.readInt();
}
din.close();
}
catch (IOException ioe){}
}
}
程序运行结果如下:
1 Wang
2 Li
对象流
• 对象的持续性(Persistence)
– 能够纪录自己的状态一边将来再生的能力,叫对象的持续性
• 对象的串行化(Serialization)
– 对象通过写出描述自己状态的的数值来记录自己的过程叫串行化。串行化的主要任务是写出对象实例变量的数值,如果变量是另一个对象的引用,则引用的对象也要串行化。这个过程是递归的
• 对象流
– 能够输入输出对象的流称为对象流。
– 可以将对象串行化后通过对象输入输出流写入文件或传送到其它地方
在java中,允许可串行化的对象在通过对象流进行传输。只有实现Serializable接口的类才能被串行化, Serializable接口中没有任何方法,当一个类声明实现Serializable接口时,只是表明该类加入对象串行化协议
要串行化一个对象,必须与一定的对象输出/输入流联系起来,通过对象输出流将对象状态保存下来(将对象保存到文件中,或者通过网络传送到其他地方) ,再通过对象输入流将对象状态恢复
类
ObjectOutputStream和ObjectInputStream分别继承了接口ObjectOutput和ObjectInput,将数据流
功能扩展到可以读写对象,前者用writeObject()方法可以直接将对象保存到输出流中,而后者用readObject()方法可以直接从输入流中
读取一个对象
例 8.10 对象流。
本例声明Student2为序列化的类。Save方法中,创建对象输出流out,并以添加方式向文件
中直接写入当前对象out.writeObject(this);display方法中,创建对象输入流in,从文件中直接读取一个对象
in.readObject(),获得该对象的类名、接口名等属性,并显示其中的成员变量。程序如下:
import java.io.*;
public class Student2 implements Serializable //序列化
{
int number=1;
String name;
Student2(int number,String n1)
{
this.number = number;
this.name = n1;
}
Student2()
{
this(0,"");
}
void save(String fname)
{
try
{
FileOutputStream fout = new FileOutputStream(fname);
ObjectOutputStream out = new ObjectOutputStream(fout);
out.writeObject(this); //写入对象
out.close();
}
catch (FileNotFoundException fe){}
catch (IOException ioe){}
}
void display(String fname)
{
try
{
FileInputStream fin = new FileInputStream(fname);
ObjectInputStream in = new ObjectInputStream(fin);
Student2 u1 = (Student2)in.readObject(); //读取对象
System.out.println(u1.getClass().getName()+" "+
u1.getClass().getInterfaces()[0]);
System.out.println(" "+u1.number+" "+u1.name);
in.close();
}
catch (FileNotFoundException fe){}
catch (IOException ioe){}
catch (ClassNotFoundException ioe) {}
}
public static void main(String arg[])
{
String fname = "student2.obj";
Student2 s1 = new Student2(1,"Wang");
s1.save(fname);
s1.display(fname);
}
}
程序运行结果如下:
Student2 interface java.io.Serializable
1 Wang
分享到:
相关推荐
Java中输入输出的总括
流一般分为输入流(Input Stream)和输出流(Output Stream)两类,但这种划分并不是绝对的。比如一个文件,当向其中写数据时,它就是一个输出流;当从其中读取数据时,它就是一个输入流。当然,键盘只是一个输人流...
NULL 博文链接:https://juliancg65.iteye.com/blog/572174
java io 操作的一个总结,对于初学java的朋友是十分有帮助的
是html中的CSS的总括,包含了html中所有样式的特效,是网页开发人员在网页开发中非常便捷,舒畅。
图书总括登记与个别登记表.pdf
这些词汇一共分为十章,是把所有关于java的英语单词 总括在一起,方便大家记忆
保险基础知识总括.pptx
管理咨询总括汇报.ppt
品管圈知识总括.pptx
会计基础知识点总括.pdf
资产质量分析总括内容.pptx
运维工作总括性结论及总结性报告.pdf运维工作总括性结论及总结性报告.pdf运维工作总括性结论及总结性报告.pdf运维工作总括性结论及总结性报告.pdf运维工作总括性结论及总结性报告.pdf运维工作总括性结论及总结性报告...
运维工作总括性结论及总结性报告.docx运维工作总括性结论及总结性报告.docx运维工作总括性结论及总结性报告.docx运维工作总括性结论及总结性报告.docx运维工作总括性结论及总结性报告.docx运维工作总括性结论及总结...
Java 语言基本上属于一个完全面向对象的语言,并且语言的设计仍然以简捷为重点,因此有其它语言基础的朋友学习Java语言会感觉比较简单,对于这个语言学习的难点则是面向对象的相关概念,包括:包、类、对象、实例、...
2011政治理论逻辑关联总括图:最权威的资料,最高效的复习!!
运维年度工作总括性结论及总结性报告.pdf运维年度工作总括性结论及总结性报告.pdf运维年度工作总括性结论及总结性报告.pdf运维年度工作总括性结论及总结性报告.pdf运维年度工作总括性结论及总结性报告.pdf运维年度...
保险基础知识--总括.pptx