在使用IO流时该选择何种流对象

在使用IO流时该选择何种对象是很多人的一个问题。一下通过一个判断顺序和案例来回答这个问题

 

一:先介绍简单介绍一下流

     流可以分为字符流和字节流两种类型

  字节流对应InputSteam(输入流)和OutStream(输出流)。

  字符流对应Reader(输入流)和Writer(输出流)。

 

二:现在介绍选择规则

  (1)通过设备输入流

    若输入流是字节则选择InputStream。

    若输入流是纯文本则选择Reader。

  (2)通过设备判断输出流

    若输出流是字节,则选择outputstream。

    若输出流是纯文本,则选择Writer。

 

 

三:现在运用一个例子来表现上面的规则

  需求:将一个文本文件的内容通过控制台打印出来。

  1.文本文件是一个纯文本文件

   所以输入流是Reader

   在Reader中操作文件的类是FileReader

   所以FileReader fd = new FileReader("123.txt");

   若要提高读取效率,则使用缓冲区

   所以BufferedReader brd = new BufferedReader(reader);

      2.以为读取的是纯文本,所以输出流使用Writer

     而控制台的输出System.out是一个字节流

   所以需要把字符流装换为字节流进行输出

   所以选择转换流 OutputStreamWriter

   OutputStreamWriter  out = new OutputStreamWriter(System.in);

   若要提高效率,则使用BufferedWriter

   所以:BufferedWriter brw = new BufferedWriter(out);

以下是代码示例

 1 package com.sjj.io;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.BufferedWriter;
 5 import java.io.FileReader;
 6 import java.io.IOException;
 7 import java.io.OutputStreamWriter;
 8 
 9 public class Test01 {
10 
11     
12     public static void main(String[] args){
13         BufferedReader brd = null;
14         BufferedWriter brw = null;
15         try {
16             brd = new BufferedReader(new FileReader("d:\\fileIo.txt"));
17             brw = new BufferedWriter(new OutputStreamWriter(System.out));
18             String str = null;
19             while((str = brd.readLine()) != null){
20                 brw.write(str);
21                 brw.newLine();
22                 brw.flush();
23             }
24         } catch (IOException e) {
25             // TODO Auto-generated catch block
26             e.printStackTrace();
27         }finally{
28             if (brd != null) {
29                 try {
30                     brd.close();
31                 } catch (IOException e) {
32                     // TODO Auto-generated catch block
33                     e.printStackTrace();
34                 }
35             }
36             if (brd != null) {
37                 try {
38                     brw.close();
39                 } catch (IOException e) {
40                     // TODO Auto-generated catch block
41                     e.printStackTrace();
42                 }
43             }
44         }
45         
46     }
47 
48 }
View Code

 

posted @ 2016-02-20 17:24  沈沈沈丶  阅读(427)  评论(0编辑  收藏  举报