输入/输出流体系中还提供了两个转换流,这两个转换流用于实现将字节流转换成字符流,其中InputStreamReader将字节输入流转换成字符输入流,OutputStreamWriter 将字节输出流转换成字符输出流。

下面以获取键盘输入为例来介绍转换流的用法。Java 使用System.in代表标准输入,即键盘输入,但这个标准输入流是InputStream类的实例,使用不太方便,而且键盘输入内容都是文本内容,所以可以使用InputStreamReader将其转换成字符输入流,普通的Reader读取输入内容时依然不太方便,可以将普通的Reader再次包装成BufferedReader,利用BufferedReader的readLine()方法可以一次读取一行内容。如下程序所示。

publicclassKeyinTest
{
publicstaticvoidmain(String[]args)
{
BufferedReaderbr=null;
try
{
//将Sytem.in对象转换成Reader对象
InputStreamReaderreader=newInputStreamReader(System.in);
//将普通Reader包装成BufferedReader
br=newBufferedReader(reader);
Stringbuffer=null;
//采用循环方式来一行一行的读取
while((buffer=br.readLine())!=null)
{
//如果读取的字符串为"exit",程序退出
if(buffer.equals("exit"))
{
System.exit(1);
}
//打印读取的内容
System.out.println("输入内容为:"+buffer);
}
}
catch(IOExceptionioe)
{
ioe.printStackTrace();
}
//关闭输入流
finally
{
try
{
br.close();
}
catch(IOExceptionioe)
{
ioe.printStackTrace();
}
}
}
}

上面程序中的粗体字代码负责将System.in包装成BufferedReader, BufferedReader流具有缓冲功能,它可以一次读取一行文本一以换行符 为标志,如果它没有读到换行符,则程序阻塞,等到读到换行符为止。运行上面程序可以发现这个特征,在控制台执行输入时,只有按下回车键,程序才会打印出刚刚输入的内容。

提示:

由于BufferedReader 具有一个readLine()方法,可以非常方便地一次读入一行内容,所以经常把读取文本内容的输入流包装成BufferedReader,用来方便地读取输入流的文本内容。