一、简单介绍
Java支持字节流和字符流,也支持它们之间的转换。通过两个类实现:InputStreamReader、OutputStreamWriter。
1. InputStreamReader
java.lang.Object java.io.Reader java.io.InputStreamReader
InputStreamReader 继承自Reader字符流类,将读取的字节解码为字符。(在内存中处理的是字符)public class InputStreamReader extends Reader
2. OutputStreamWriter
java.lang.Object java.io.Writer java.io.OutputStreamWriter
public class OutputStreamWriter extends Writer
OutputStreamWriter 继承自Writer字符流类,将向其写入的字符编码为字节。(在内存中处理的是字符)
二、BufferedReader、BufferedWriter类的使用
为了达到最高的效率,避免频繁地进行字符与字节间的相互转换,最好不要直接使用InputStreamReader、OutputStreamWriter这两个类来进行读写,应尽量使用ufferedWriter类包装OutputStreamWriter类,用BufferedReader类包装InputStreamReader类。例如:
BufferedWriter out = new BufferedWriter(newOutputStreamWriter(System.out));
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
字节流中没有BufferedReader类,是由于字符流在读写过程中需要借助缓存,而字节流不需要。
缓冲的优点:从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。若没有缓冲,则每次调用read()或readLine()都会导致直接从文本读取字节,并将其转换为字符后返回,这是及其低效的。
1. BufferedReader类
java.lang.Object java.io.Reader java.io.BufferedReader
继承自Reader类,是字符流。public class BufferedReader extends Reader
构造方法摘要 | |
---|---|
BufferedReader(Reader in) 创建一个使用默认大小输入缓冲区的缓冲字符输入流。 |
2. BufferedWriter类
java.lang.Object java.io.Writer java.io.BufferedWriter
public class BufferedWriter extends Writer继承自Writer类,是字符流。
构造方法摘要 | |
---|---|
BufferedWriter(Writer out) 创建一个使用默认大小输出缓冲区的缓冲字符输出流。 |
三、字节流、字符流转换使用方法
1. InputStreamReader
有两个主要的构造函数:
InputStreamReader(InputStream in)// 用默认字符集创建一个InputStreamReader对象
InputStreamReader(InputStream in,String CharsetName)// 接受已指定字符集名的字符串,并用该字符集创建对象
示例):
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String str = null;
while(true)
{
System.out.print("输入的数字:");
try
{
str = in.readLine();// public String readLine()
}
catch(Exception e)
{
}
int i = -1;
try
{
i = Integer.parseInt(str);
System.out.println("输入的数字修改后为:" + i);
break;
}
catch(Exception e)
{
}
输入是对字符进行操作,因此不用清缓存
2. OutputStreamWriter
有两个主要的构造函数:
OutputStreamWriter(OutputStream in) // 用默认字符集创建一个OutputStreamWriter对象
OutputStreamWriter(OutputStream in,String CharsetNarme) // 接受已指定字符集名的字符串,并用该字符集创建OutputStreamWriter对象
示例(不考虑异常):
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
String str = "kooljjhhnb";
out.write(str,0,str.length);out.close();//输出是对字符进行操作,因此必须清缓存