1.2.2 字符流类
字符流类由两个类层次结构定义 。顶层有两个抽象类:Reader和Writer 。这些抽象类处理统一编码的字符流 。Java中这些类含有多个具体的子类 。字符流类如表1-2所示 。
表1-2 字符流的输入/输出类
抽象类Reader和Writer定义了几个实现其他流类的关键方法 。其中两个最重要的是read()和write(),它们分别进行字符数据的读和写 。这些方法被派生流类重载 。
1.3 预定义流
所有的Java程序自动导入java.lang包 。该包定义了一个名为System的类 , 该类封装了运行时环境的多个方面 。System 同时包含三个预定义的流变量,in,out和err 。这些成员在System中是被定义成public 和static型的,这意味着它们可以不引用特定的System对象而被用于程序的其他部分 。
System.out是标准的输出流 。默认情况下 , 它是一个控制台 。System.in是标准输入,默认情况下,它指的是键盘 。System.err指的是标准错误流,它默认是控制台 。然而,这些流可以重定向到任何兼容的输入/输出设备 。System.in 是inputStream的对象java最简单的输出代码;System.out和System.err是PrintStream的对象 。它们都是字节流,尽管它们用来读写外设的字符 。但可以用基于字符的流来包装它们 。
二、读取控制台输入
在Java 1.0中,完成控制台输入的惟一途径是字节流,使用该方法的老代码依然存在 。今天 , 运用字节流读取控制台输入在技术上仍是可行的,但这样做需要用到不被赞成的方法 , 这种做法不值得推荐 。Java 2中读取控制台输入的首选方法是字符流,它使程序容易符合国际标准并且易于维护 。
Java没有像标准C的函数scanf()或C++输入操作符那样的统一的控制台输入方法 。Java中,控制台输入由从System.in读取数据来完成 。为获得属于控制台的字符流,在BufferedReader对象中包装System.in 。BufferedReader 支持缓冲输入流查看批注 。它最常见的构造函数如下:
BufferedReader(Reader inputReader)
这里 , inputReader是链接被创建的BufferedReader实例的流 。Reader是一个抽象类 。它的一个具体的子类是InputStreamReader,该子类把字节转换成字符查看批注 。为获得链接System.in的一个InputStreamReader的对象 , 用下面的构造函数:
InputStreamReader(InputStream inputStream)
因为System .in引用了InputStream 类型的对象 , 它可以用于inputStream 。综上所述,下面的一行代码创建了与键盘相连的BufferedReader对象 。
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
当该语句执行后 , br是通过System.in生成的链接控制台的字符流 。
2.1 读取字符
从BufferedReader读取字符,用read() 。这里所用的read()版本如下:
int read( ) throws IOException
该方法每次执行都从输入流读取一个字符然后以整型返回 。当遇到流的末尾时它返回-1 。可以看到,它要引发一个IOException异常 。下面的例程演示了read()方法,从控制台读取字符直到用户键入“q”:
// Use a BufferedReader to read characters from the console.
import java.io.*;
class BRRead {
public static void main(String args[])
throws IOException
{
char c;
BufferedReader br = new
BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter characters, 'q' to quit.");
// read characters
do {
c = (char) br.read();
System.out.println(c);
} while(c != 'q');
}
}
下面是程序运行:
Enter characters, 'q' to quit.
123abcq
1
2
3
a
b
c
q
推荐阅读
- java递归归并排序代码,java归并排序简单代码
- g510怎么换显卡,g510拆机教程 详解
- hbase适合实时查询,hbase数据查询
- pg数据库导出文件怎么打开,pg数据库导出表结构
- php7.0添加数据库6 php数据库添加数据语句
- e语言在go程,go语言面试题
- 两个网件路由器怎么组网,两个网件路由器怎么无缝切换
- ppt如何点数字跳出图片,ppt按数字跳到对应界面
- go语言uint32 Go语言设计与实现