java I/O 流的操作规律 小结

来源:互联网 发布:android手机装linux 编辑:程序博客网 时间:2024/05/30 05:05

IO流的操作规律

1、明确源和目的。

源:InputStream   Reader 一定是被读取的。
目的:OutputStream  Writer 一定是被写入的。

2、处理的数据是否是纯文本的数据?

是:使用字符流。Reader Writer
否:使用字节流。 InputStream OutputStream

3、明确数据所在的设备

源设备:
    键盘(System.in)
    硬盘(FileXXX)FileReader FileInputStream
    内存(数组)ByteArrayInputStream CharArrayReader StringReader
    网络(Socket)
  目的设备:
    显示器(控制台System.out)
    硬盘(FileXXX)FileWriter FileOutputStream
    内存(数组)ByteArrayOutputStream CharArrayWriter StringWriter
    网络(Socket) 

4、明确是否需要额外功能?

  1) 是否需要高效?缓冲区Buffered (字符与字节各两个)。 
  2) 是否需要转换?转换流  InputStreamReader OutputStreamWriter
  3) 是否操作基本数据类型? DataInputStream  DataOutputStream
  4) 是否操作对象(对象序列化)? ObjectInputStream ObjectOutputStream 
  5) 需要对多个源合并吗? SequenceInputStream
  6) 需要保证数据的表现形式到目的地吗? PrintStream 或 PrintWriter 

另外:如果数据有规律,并且源和目的都是file,需要随机访问时,可以使用RandomAccessFile工具类。

下面我们来通过几个案例分析一下怎么选择流:

需求1:复制一个文本文件。

1、明确源和目的。

源:InputStream   Reader
目的:OutputStream  Writer

2、处理的数据是否是纯文本的数据?

源:Reader
目的:Writer

3、明确数据所在的设备。

源:file(硬盘) FileReader fr = new FileReader("a.txt");
目的:file(硬盘) FileWriter fw = new FileWriter("b.txt");

4、明确是否需要额外功能?

BufferedReader bufr = new BufferedReader(new FileReader("a.txt"));
BufferedWriter bufw = new BufferedWriter(new FileWriter("b.txt"));


需求2:复制一个图片文件。

1、明确源和目的。

源:InputStream   Reader
目的:OutputStream  Writer

2、处理的数据是否是纯文本的数据?

源:InputStream
目的:OutputStream

3、明确数据所在的设备。

源:file(硬盘)   FileInputStream fin = new FileInputStream("1.jpg");
目的:file(硬盘) FileOutputStream fout = new FileOutputStrema("2.jpg");

4、明确是否需要额外功能?

BufferedInputStream bufin = new BufferedInputStream( fin );
BufferedOutputStream bufout = new BufferedOutputStream( fout );


需求3:读取键盘录入,存储到一个文件中。

1、明确源和目的。

源:InputStream   Reader
目的:OutputStream  Writer

2、处理的数据是否是纯文本的数据?

源:Reader
目的:Writer

3、明确数据所在的设备。

源:键盘
目的:硬盘

4、明确是否需要额外功能?

将键盘录入的字节转成字符。需要将字节-->字符的转换流。InputStreamReader。还想需要高效。

InputStreamReader isr = new InputStreamReader(System.in);
FileWriter fw = new FileWriter("a.txt");

BufferedReader bufr = new BufferedReader( isr);
BufferedWriter bufw = new BufferedWriter( fw );


需求4:读取一个文本文件,显示到显示器上。

1、明确源和目的。

源:InputStream   Reader
目的:OutputStream  Writer

2、处理的数据是否是纯文本的数据?

源:Reader
目的:Writer

3、明确数据所在的设备。

源:硬盘
目的:显示器

4、明确是否需要额外功能?

将字符数据转换成字节输出。输出转换流:OutputStreamWriter。还想需要高效。

FileReader fr = new FileReader("a.txt");
OutputStreamWriter osw = new OutputStreamWriter(System.out);

BufferedReader bufr = new BufferedReader( fr);
BufferedWriter bufw = new BufferedWriter( osw )


需求5:读取一个文本文件,将文本按照指定的编码表UTF-8写入到另一个文件中。

1、明确源和目的。

源:InputStream   Reader
目的:OutputStream  Writer

2、处理的数据是否是纯文本的数据?

源:Reader
目的:Writer

3、明确数据所在的设备。

源:file(硬盘) FileReader fr = new FileReader("a.txt");
目的:file(硬盘) FileWriter fw = new FileWriter("b.txt");

4、明确是否需要额外功能?

输出时要为字符数据指定编码表。转换流中的参数需要字节流,因此用FileOutputStream。转换流:OutputStreamWriter,还想需要高效。

FileReader fr = new FileReader("a.txt");
OutputStreamWriter osw = new OutputStreamWriter(fout,”utf-8”);

BufferedReader bufr = new BufferedReader( fr);
BufferedWriter bufw = new BufferedWriter( osw );