[关闭]
@Cesar 2015-12-02T08:08:26.000000Z 字数 2024 阅读 1827

Java的IO中的Reader和Writer与传统流式IO的区别和联系

Java 学习

本节目录

  1. 什么是Writer和Reader类
  2. 与InputStream和OutputStream的区别和联系(映射)
    2.1. 为什么还要保留老的IO类
    2.2. 老式IO与writer和reader的映射

1. 什么是Writer和Reader

在Java 1.1 中,对基本的IO流类的库做了重大的修改。尤其是Writer和Reader。它们是并不是用来替代InputStream和OutputStream的类。实际上InputStream和OutputStream在以面向字节形式的IO中仍然有着极其重要的作用,而Reader以及Writer则提供了兼容Unicode与面向字符的IO功能。此外,

  1. package Test1202;
  2. import java.io.BufferedReader;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileNotFoundException;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import java.io.InputStreamReader;
  9. import java.io.UnsupportedEncodingException;
  10. /**
  11. * 新建一个类,取名叫TestIO,在src文件夹下新建一个TXT文档叫"test.txt"
  12. * 在文件中随意输入一些文字
  13. * @author Cesar
  14. *
  15. */
  16. public class TestIO {
  17. //文件位置
  18. public static final String filePath = "./src/test.txt";
  19. public static void main(String[] args) {
  20. File file = new File(filePath);
  21. InputStream in;
  22. try {
  23. in = new FileInputStream(file);
  24. //考虑编码格式
  25. InputStreamReader reader = new InputStreamReader(in,"UTF-8");
  26. //新建一个缓冲
  27. BufferedReader br = new BufferedReader(reader);
  28. String result ;
  29. while((result = br.readLine())!=null){
  30. System.out.println(result);
  31. }
  32. } catch (FileNotFoundException e) {
  33. e.printStackTrace();
  34. } catch (UnsupportedEncodingException e) {
  35. e.printStackTrace();
  36. } catch (IOException e) {
  37. e.printStackTrace();
  38. }
  39. }
  40. }

例子解析:
从上面的例子很容易看出,设计Reader和Writer的目的主要是为了国际化,老的IO流只能支持8位的字节流,而不能很好的支持16位的unicode字符。所以添加该结构就是为了在所有的IO操作中都支持国际化的编码。同事,新的类的速度要好于老的IO类。


2. 与InputStream和OutputStream的区别和联系(映射)

2.1. 为什么还要保留老式的IO
在某些场合,面向字节的InputStream和OutputStream才是正确的解决方案。比如java.util.zip就是面向字节的而不是面向字符的。因此,通常尽量先要弄明白我们的需求,然后再决定是使用哪一种流式读取。
2.2. 两种方式的映射

传统IO Writer和Reader
InputStream Reader(适配器:InputStreamReader)
OutputStream Writer(适配器:OutputStreamWriter)
FileInputStream FileReader
FileOutStream FileWriter
StringBufferInputstream(已经弃用) StringReader
StringWriter
ByteArrayInputstream CharArrayReader
ByteArrayInputstream CharArrayWriter
PipedInputStream PipedReader
PipedOutputstream PipedWriter
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注