黑马程序员技术交流社区
标题:
IO流对象使用规律总结
[打印本页]
作者:
一叶障目
时间:
2014-11-13 22:03
标题:
IO流对象使用规律总结
本帖最后由 一叶障目 于 2014-11-13 22:07 编辑
一直对io流很头晕,因为流对象太多,下面的总结让我豁然开朗,分享给大家:(试着自己打过一遍以后,io的感觉还是比较差,还得回去好好复习复习)
流的规律:流对象很多,遇到问题难以选择,只需要通过
四个明确
即可:
1、明确源和目的
源
InputStream
Reader
目的
OutStream
Writer
2、明确操作的数据是否纯文本数据:
是否纯文本
是
否
源
Reader
InputStream
目的
Writer
OutStream
3、明确具体的设备:
设备
硬盘
内存
网络
键盘
控制台
源
File
数组
Socket流
System.in
目的
File
数组
Socket流
System.ou
4、是否需要额外的功能:
1、是否需要高效:需要就加上Buffer
2、字符与字节转换
具体例子:
需求一:复制一个文本文件;
1、明确目的和源
源: Reader InputStream
目的: Writer OutputStream
2、明确是否纯文本数据:是
源: Reader
目的: Writer
3、明确具体设备
源:硬盘 File
目的:硬盘 File
FileReader fr=new FileReader("a.txt");
FileWriter fw=new FileWriter("b.txt");
4、是否需要额外功能:需要,高效
BufferedReader bufr=new BufferedReader(new FileReader("a.txt"));
BufferedWriter bufw=new BufferedWriter(new FileWriter("b.txt"));
需求二:读取键盘录入信息,并写入到一个文件中;
1、明确源和目的
源: Reader InputStream
目的: Writer OutputStream
2、明确是否纯文本数据:是
源: Reader
目的: Writer
3、明确具体设备
源:控制台 System.in
目的:硬盘 File
InputStream in=System.in;
FileWriter fw=new FileWriter("b.txt");
需要将读取的字节数据转成字符串,在由字符流操作,麻烦
4、明确是否需要额外功能:需要,转换,高效
将字节流转成字符流。因为第二步明确的流是Reader,字符流操作文本数据更便捷;所以将已有的字节流转为字符流,InpuStreamReader
InputStreamReader isr=new InputStreamReader(System.in);
FileWriter fw=new FileWriter("b.txt");
还可以添加高效功能:
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw=new BufferedWriter(new FileWriter("b.txt"));
需求三:将一个文本文件数据显示在控制台上;
1、明确源和目的:
源: Reader InputStream
目的: Writer OutputStream
2、明确是否纯文本数据:是
源: Reader
目的: Writer
3、明确具体设备:
源: 硬盘 File
目的: 控制台 System.out
FileReader fr=new FileReader("a.txt");
OutputStream out=System.out;
4、明确是否需要额外功能:转换,高效
转换:
FileReader fr=new FileReader("a.txt");
OutputStreamWriter osw=new OutputStreamWriter(System.out);
高效:
BufferedReader bufr=new BufferedReader(new FileReader("a.txt"));
BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(System.ou));
需求四:读取键盘录入信息,显示在控制台上;
1、明确源和目的
源: Reader InputStream
目的: Writer OutputStream
2、明确数据是否纯文本:是
源: Reader
目的: Writer
3、明确具体设备
源: 键盘 System.in
目的:控制台 System.out
InputStream in=System.in;
OutputStream out=System.out;
4、明确是否需要额外功能:
需要转换,因为都是字节流,但是操作的都是文本数据
InputStreamReader isr=new InputStreamReader(System.in);
OutputStreamWriter osw=new OutputStreamWriter(System.out);
高效:
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(System.out));
需求五:将一个中文字符串数据按照指定的编码表写入到一个文本文件中;
1、明确源和目的
目的: Writer OutputStream
2、明确数据是否纯文本
是: Writer
3、明确设备
设备:硬盘 File
因为指定编码表,所以不能使用 FileWriter ,因为 FileWriter 内部使用的是默认的本地编码表;
只能使用其父类 OutputStreamWriter,OutputStreamWriter操作一个字节输出流对象,既然是操作文件,那么该对象就是FileOutStream;
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("a.txt"),charsetName);
4、明确额外功能
高效:
BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("a.txt"),charsetName));
关于转换流的使用时机:
1、源或者目的的对应设备是字节流,但是操作的却是文本数据,可以使用转换作为桥梁,提高文本操作的便携;
2、一旦操作文本涉及到具体的编码表的时候,必须使用转换流;
作者:
wf111sxwf
时间:
2014-11-14 18:33
总结的好啊 学习了
作者:
cczheng
时间:
2014-11-15 11:34
挺不错,和毕老师的笔记类似
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2