InputStreamReader 和Buffered的用法

一 、InputStreamReader的用法

是字节流通向字符流的桥梁,封装了InputStream里面,她以高级的形式一次读取一个一个字符,以文本格式输入输出,可以指定编码格式;
一般用法:
   InputStremReader isr = new InputStreamReader(new FileInputStream("a.txt"));
   int ch;
  while((ch = isr.read()) != -1){
     System.out.println(char(ch));
}

二、BufferedReader的用法

所属类库:
  
   java.lang.Object
          java.io.Reader
                 java.io.BufferedReader

基本概念:
 
public class BufferedReader extends Reader
从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。可以指定缓冲区的大小,或者课使用默认的大小

通常 Reader所作的每个读取都会导致底层字符或者字节流进行相应的读取,而且提供了实用的readLine(),读取一个文本行,从字符输入流中读取文本,缓冲各个字符。

一般用法:
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("C:\\Users\\john\\Desktop\\a.txt")));
  String data = null;
  while((data = br.readLine())!= null){
   System.out.println(data);
  }

两者比较:
 1.BufferedReader 用法比InputStreamReader要复杂,复杂的存在必然会导致优势存在,InputStreamReader是一个一个字符读取的,每次读取都会执行一次IO,IO操作很浪费时间,这就导致程序效率降低,而BufferedReader很好的解决了这个问题,他可以一层次读取大量的数据,大大减少了IO次数,提升效率。
 2.字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。所以字节流是java虚拟机将字节转化为2个字节的Unicode字符为单位的字符构成的(1个汉子是两个Unicode),所以它对多国语言之处比较好。如果是音频文件、图片、歌曲、就用字节流好点,如果是关系到中文,用字符流好点。
所有的文件的存储都是字节的存储,在磁盘上保留的并不是文件的字符,而是把字符编码成字节,在存储这些字节到磁盘。在读取文件时,也是一个一个字节的读取已形成字节序列。
字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串 2
字节流提供了处理任何类型的IO操作的功能,但他不能直接处理Unicode字符,而字符流可以。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章