吉大《java程序设计》21春复习指导(六)
吉大《JAVA程序设计》FAQ(六)第六章 IO输入输出
一、串行化的目的是什么?
Java对象的单行化的目标是为Java的运行环境提供一组特性,如下所示:
(1)尽量保持对象串行化的简单扼要 ,但要提供一种途径使其可根据开发者的要求进行扩展或定制。
(2)串行化机制应严格遵守Java的对象模型 。对象的串行化状态中应该存有所有的关于种类的安全特性的信息。
(3)对象的串行化机制应支持Java的对象持续性。
(4)对象的串行化机制应有足够的 可扩展能力以支持对象的远程方法调用(RMI)。
(5)对象串行化应允许对象定义自身 的格式即其自身的数据流表示形式,可外部化接口来完成这项功能。二、串行化方法有哪些方法?
从JDK1.1开始,Java语言提供了对象串行化机制 ,在java.io包中,接口Serialization用来作为实现对象串行化的工具 ,只有实现了Serialization的类的对象才可以被串行化。Serializable接口中没有任何的方法。当一个类声明要实现Skerializable接口时,只是表明该类参加串行化协议,而不需要实现任何特殊的方法。下面我们通过实例介绍如何对对象进行串行化。
1.定义一个可串行化对象
一个类,如果要使其对象可以被串行化,必须实现Serializable接口。我们定义一个类Student如下:
public class Student implements Serializable{
int id; //学号
String name; //姓名
int age; //年龄
String department //系别
public Student(int id,String name,int age, String depart
ment){
this.id=id;
this.name=name;
this.age=age;
this.department=department;
}
}2.构造对象的输入/输出流
要串行化一个对象,必须与一定的对象输出/输入流联系起来,通过对象输出流将对象状态保存下来,再通过对象输入流将对象状态恢复。
java.io包中,提供了ObjectInputStream和ObjectOutputStream将数据流功能扩展至可读写对象 。在ObjectInputStream 中用readObject()方法可以直接读取一个对象,ObjectOutputStream中用writeObject()方法可以直接将对象保存到输出流中。
public class ObjectSer{
public static void main(String args[ ])throws IOExcep
tion,ClassNotFoundException{
Student stu=new Student(981036,”LiuMing”,18,”CSD”);
FileOutputStream fo=new FileOutputStream(”data.ser”);
ObjectOutputStream so=new ObjectOutputStream(fo);
try{
so.writeObject(stu);
so.close();
}catch(IOExcption)
{ System.out.println(e);}
stu=null;
FileInputStream fi=new FileInputStream(”data.ser”);
ObjetctInputStream si=new ObjectInputStream(fi);
try{
stu=(Student)si.readObject;
si.close();
}catch(IOException)
{System.out.println(e);}
System.out.println(”Student Info:”);
System.out.println(”ID:”+stu.id);
System.out.println(”Name:”+stu.name);
System.out.println(”Age:”+stu.age);
System.out.println(”Dep:”+stu.department);
}
} 运行结果如下:
Student Info:
ID:981036
Name:LiuMing
Age:18
Dep:CSD
在这个例子中,我们首先定义了一个类Student,实现了Serializable接口 ,然后通过对象输出流的writeObject()方法将Student对象保存到文件 data.ser中 。之后,通过对家输入流的readObjcet()方法从文件data.ser中读出保存下来的Student对象 。从运行结果可以看到,通过串行化机制,可以正确地保存和恢复对象的状态。
三、如何从键盘上读取字符数据?
InputStreamReader:它提供了字节流到字符流的转换BufferedReader:从字符流中读取文本,并且使用字符缓存来提高读取效率
例子:import java.io.*;
public class Hello{
public static void main(String args[]){
try{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.println("输入:");
String str=br.readLine();
System.out.println("输入的数据是:"+str);
}catch(IOException e){
System.out.println(e);
}
}
四、如何从从文件中读取字节数据?
FileInputStream:按照字节方式读取文件内容
例子:import java.io.*;
public class Hello{
public static void main(String args[]){
try{
DataInputStream br=new DataInputStream(new FileInputStream("/home/wuxiaoxiao/1.txt"));
//读取数据
int v1=br.readInt();
double v2=br.readDouble();
byte[] buff=new byte;
br.read(buff);
String v3=new String(buff);
//显示数据
System.out.println(v1.....);
}catch(IOException e){
System.out.println(e);
}
}
}
东师作业答案可以联系QQ 761296021
页:
[1]