找回密码
 注册

QQ登录

只需一步,快速开始

查看: 890|回复: 0

吉大《java程序设计》21春复习指导(六)

[复制链接]
发表于 2021-2-22 11:12:17 | 显示全部楼层 |阅读模式
吉大《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
  NameiuMing
  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[17];
  br.read(buff);
  String v3=new String(buff);
  //显示数据
  System.out.println(v1.....);
  }catch(IOException e){
  System.out.println(e);
  }
  }
  }
东师作业答案可以联系QQ 761296021

QQ|手机版|小黑屋|网站地图|无忧答案网 ( 冀ICP备18010495号-1 )

GMT+8, 2024-5-4 15:53

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表