Java.io包中流的操作主要有字节流和字符流两大类,两类都有输入和输出的操作。在字节流中,输入和输出分别使用InputStream和OutputStream;在字符流中,分别使用Reader和Writer。
OutputStream类和InputStream类都是抽象类,如果要使用此类,则必须使用其子类向上转型来实例化。在程序中,一个字符等于两个字节,java中提供Writer和Reader两个类专门操作字符流.其与字节流操作唯一的好处就是可以直接对字符进行操作,不用将字符串变成byte数组后再输出/输入。InputStream/OutputStream与Reader/Writer的区别除了操作对象不同之外,是否还存在其他的不同呢?实际上,字节流(InputStream/OutputStream)在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流(Reader/Writer)在操作时用到了缓冲区,通过缓冲区再操作文件。
InputStreamReader将字节流转换为字符流。是字节流通向字符流的桥梁。如果不指定字符集编码,该解码过程将使用平台默认的字符编码,如:GBK。
构造方法 :
InputStreamReader isr = new InputStreamReader(InputStream in);//构造一个默认编码集的InputStreamReader类
InputStreamReader isr = new InputStreamReader(InputStream in,String charsetName);//构造一个指定编码集的InputStreamReader类。
BufferReader类用于从缓冲区中读取数据,BufferReader构造方法中只能接收字符输入流的实例,所以必须用字符输入流和字节输入流的转换类InputStreamReader类将字节输入流System.in转换成字符输入流。
Scanner类是java中提供的专门输入类。打印流是整个IO包中最方便的输出类,主要包括字节打印流PrintStream和字符打印流PrintWriter。