|
◇ 获取当前编码方式 public String getEncoding();
◇ 关闭流 public void close() throws IOException;
4.7.3 BufferedReader和BufferedWriter
◇ 生成流对象
public BufferedReader(Reader in); //使用缺省的缓冲区大小 public BufferedReader(Reader in, int sz); //sz为缓冲区的大小 public BufferedWriter(Writer out); public BufferedWriter(Writer out, int sz);
◇ 读入/写出字符
除了Reader和Writer中提供的基本的读写方法外,增加对整行字符的处理。 public String readLine() throws IOException; //读一行字符 public void newLine() throws IOException; //写一行字符
【例4-4】
import java.io.*; public class NumberInput{ public static void main(String args[]){ try{ InputStreamReader ir; BufferedReader in; ir=new InputStreamReader(System.in); //从键盘接收了一个字符串的输入,并创建了一个字符输入流的对象 in=new BufferedReader(ir); String s=in.readLine(); //从输入流in中读入一行,并将读取的值赋值给字符串变量s System.out.println("Input value is: "+s); int i = Integer.parseInt(s);//转换成int型 i*=2; System.out.println("Input value changed after doubled: "+i); }catch(IOException e) {System.out.println(e);} } }
运行结果
D:\>java NumberInput 123 Input value is 123 Input value changed after doubled: 246 |
注意:在读取字符流时,如果不是来自于本地的,比如说来自于网络上某处的与本地编码方式不同的机器,那么我们在构造输入流时就不能简单地使用本地缺省的编码方式,否则读出的字符就不正确;为了正确地读出异种机上的字符,我们应该使用下述方式构造输入流对象: ir = new InputStreamReader(is, "8859_1");
采用ISO 8859_1编码方式,这是一种映射到ASCII码的编码方式,可以在不同平台之间正确转换字符。
4.8 对象的串行化(Serialization)
4.8.1 串行化的定义
1. 什么是串行化
对象的寿命通常随着生成该对象的程序的终止而终止。有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复。我们把对象的这种能记录自己的状态以便将来再生的能力,叫做对象的持续性(persistence)。对象通过写出描述自己状态的数值来记录自己,这个过程叫对象的串行化(Serialization)。
2. 串行化的目的
串行化的目的是为java的运行环境提供一组特性,其主要任务是写出对象实例变量的数值。
4.8.2 串行化方法
在java.io包中,接口Serializable用来作为实现对象串行化的工具,只有实现了Serializable的类的对象才可以被串行化。
1. 定义一个可串行化对象
public class Student implements Serializable{ int id; //学号 String name; //姓名 int age; //年龄 String department //系别 public Student(int id,String name,int age,String department){ this.id = id; this.name = name; this.age = age; this.department = department; } }
2. 构造对象的输入/输出流
要串行化一个对象,必须与一定的对象输入/输出流联系起来,通过对象输出流将对象状态保存下来,再通过对象输入流将对象状态恢复。
java.io包中,提供了ObjectInputStream和ObjectOutputStream将数据流功能扩展至可读写对象。在ObjectInputStream中用readObject()方法可以直接读取一个对象,ObjectOutputStream中用writeObject()方法可以直接将对象保存到输出流中。 |