JavaSE学习之IO流使用技巧

来源:互联网 发布:网页小游戏源码 编辑:程序博客网 时间:2024/06/11 02:12

学习过java的小伙伴和将要学习java的小伙伴,都会遇到java中很重要的一块内容,即IO流。翻开java工具书可以发现IO流中有很多类,那么问题来了,就是,开发时该用哪个对象合适呢?或者如何选择使用对象呢?下面笔者根据自己的经验跟各位小伙伴分享下。

第一步,首先,明确IO流中有两个主要的体系,即字节输入流(InputStream)、输出流(OutputStream)和字符输入流(Reader)、输出流(Writer)。其次,明确数据的来源和数据将要到达的目的地。

第二步,明确将要操作的数据是否是纯文本数据。如果数据源是纯文本数据选Reader;数据源不是纯文本数据选择InputStream。如果数据目的地是纯文本数据就选择Writer;如果不是则选择OutputStream。

  • 数据源:
    是纯文本:Reader
    不是纯文本:InputStream
  • 数据目的地:
    是纯文本:Writer
    不是纯文本:OutputStream

第三步,明确具体的设备。即数据源是从哪个设备来的:是硬盘就加File;是键盘用System.in(是一个InputStream对象);是内存用数组;是网络用Socket流。同样目的是哪个设备:是硬盘就加File;是键盘用System.out(是一个OutoutStream对象);是内存用数组;是网络用Socket流。

明确设备:

  • 数据源:
    • 键盘:System.in
    • 硬盘:FileXXX
    • 内存:数组
    • 网络:socket socket.getInputStream();
  • 数据汇:
    • 控制台:System.out
    • 硬盘:FileXXX
    • 内存:数组
    • 网络:socket socket.getOutputStream();

第四步,明确是否还需要其他额外功能呢,例如①是否需要较高的效率,即是否需要使用缓冲区,是就加上Buffered;②是否需要转换,是,就使用转换流,InputStreamReader 和OutputStreamWriter。

明确额外功能:
1. 需要转换?是,使用转换流。InputStreamReader 和 OutputStreamWriter
2. 需要高效?是,使用缓冲区。Buffered

通过上面的四步走基本就可以确定该用哪个类了。如果小伙们看了上面讲解,还是有点似懂非懂,那么,接下来大家可以看看下面的例子。把上面的四步走带入走一遍,应该就可以相当清楚了。例子如图所示。


需求:复制一个文本文件。
1. 明确体系:
源:InputStream,Reader
目的:OutputStream,Writer
2. 明确数据:
源:是纯文本吗?是 Reader
目的:是纯文本吗?是 Writer
3. 明确设备:
源:硬盘上的一个文件。FileReader
目的:硬盘上的一个文件。FileWriter
FileReader fr = new FileReader(“a.txt”);
FileWriter fw = new FileWriter(“b.txt”);
4. 需要额外功能吗?
需要,高效,使用buffer
BufferedReader bufr = new BufferedReader(new FileReader(“a.txt”));
BufferedWriter bufw = new BufferedWriter(new FileWriter(“b.txt”));

读取磁盘录入,将数据存入到一个文件中。
1. 明确体系:
源:InputStream,Reader
目的:OutputStream,Writer
2. 明确数据:
源:是纯文本吗?是 Reader
目的:是纯文本吗?是 Writer
3. 明确设备:
源:键盘,System.in
目的:硬盘,FileWriter
InputStream in =System.in;
FileWriter fw = new FileWriter(“a.txt”);
4. 需要额外功能吗?
需要,英文源明确的体系时Reader,可是源的设备是System.in。
所以为了方便于操作文本数据,将源转成字符流。需要转换流。InputStreamReader
InputStreamReader inr = new InputStreamReader(System.in);
FileWriter fw = new FileWriter(“a.txt”);
需要高效不?需要。Buffer
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new FileWriter(“a.txt”));

注:上面讲的规律适用于IO流中比较常用的类,当然还有其他一些类需要大家个别掌握。

1 0
原创粉丝点击