IO流操作规

来源:互联网 发布:阿里云 cdn ddos 编辑:程序博客网 时间:2024/05/22 17:16

IO流操作规律及需求演示: 

 

流的操作规律: 

之所以要弄清楚这个规律,是因为流对象太多,开发时不知道用哪个对象合适。 

 

想要知道开发时用到哪些对象。只要通过四个明确即可。 

 

1,明确源和目的(汇) 

源:InputStream   Reader 

目的:OutputStream   Writer 

2,明确数据是否是纯文本数据。 
源:是纯文本:Reader 

否:InputStream 
目的:是纯文本 Writer 
否:OutputStream 

 

到这里,就可以明确需求中具体要使用哪个体系。 

 

3,明确具体的设备。 

源设备: 

硬盘:File 

键盘:System.in 
内存:数组 

网络:Socket流 

 

目的设备: 

硬盘:File 

控制台:System.out 
内存:数组 

网络:Socket流 

 

4,是否需要其他额外功能。 

1,是否需要高效(缓冲区); 
是,就加上buffer. 

2,转换。 


需求1:复制一个文本文件。 
1,明确源和目的。 

源:InputStream Reader 

目的:OutputStream   Writer 
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")); 

 

 

需求2:读取键盘录入信息,并写入到一个文件中。 

 

1,明确源和目的。 

源:InputStream Reader 

目的:OutputStream   Writer 
2,是否是纯文本呢? 

是, 

源:Reader 

目的:Writer 
3,明确设备 
源: 

键盘。System.in 
目的: 

硬盘。File 

 

InputStream in  = System.in; 

FileWriter fw  = new FileWriter("b.txt"); 

这样做可以完成,但是麻烦。将读取的字节数据转成字符串。再由字符流操作。 4,需要额外功能吗? 

需要。转换。     将字节流转成字符流。因为名确的源是Reader,这样操作文本数据做便捷。 
所以要将已有的字节流转成字符流。使用字节-->字符  。InputStreamReader 

227 


 

 

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")); 

 

 

需求3:将一个文本文件数据显示在控制台上。 

1,明确源和目的。 

源:InputStream Reader 

目的:OutputStream   Writer 
2,是否是纯文本呢? 

是, 

源:Reader 

目的:Writer 
3,明确具体设备 
源: 

硬盘:File 
目的: 

控制台:System.out 

 

FileReader fr  = new FileReader("a.txt"); 

OutputStream out  = System.out;//PrintStream 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.out)); 

 

 

需求4:读取键盘录入数据,显示在控制台上。 

1,明确源和目的。 

源:InputStream Reader 

目的:OutputStream   Writer 
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)); 

 

 

5,将一个中文字符串数据按照指定的编码表写入到一个文本文件中. 

 

1,目的。OutputStream,Writer 

2,是纯文本,Writer。 

3,设备:硬盘File 

FileWriter fw  = new FileWriter("a.txt"); fw.write("你好"); 

 

注意:既然需求中已经明确了指定编码表的动作。 

那就不可以使用FileWriter,因为FileWriter内部是使用默认的本地码表。 只能使用其父类。OutputStreamWriter. 

OutputStreamWriter 接 收 一 个 字 节 输 出 流 对 象 , 既 然 是 操 作 文 件 , 那 么 该 对 象 应 该 是 FileOutputStream 

 

OutputStreamWriter osw = new OutputStreamWriter(new

FileOutputStream("a.txt"),charsetName);

 

需要高效吗?

BufferedWriter    bufw =    new    BufferedWriter(new    OutputStreamWriter(new

FileOutputStream("a.txt"),charsetName));

 

什么时候使用转换流呢? 

1,源或者目的对应的设备是字节流,但是操作的却是文本数据,可以使用转换作为桥梁。 
提高对文本操作的便捷。 

2,一旦操作文本涉及到具体的指定编码表时,必须使用转换流  。


0 0