字符流、字节流的两个顶层父类:
1.字符流:Reader、Writer
2.字节流:InputStream、OutputStream
下面图片为IO常用流之间的关系:(还有部分流没写,有兴趣的自己研究)
----------------------------------------------------------------------------------------------------------
IO中的流那么多,我们该用什么流进行开发呢?
其实掌握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:将e:盘下的mv复制到d:盘
分析:
1.明确源和目的(汇)
Inputstream OutputStream
2.明确数据是否是纯文本数据
Inputstream OutputStream
3.明确具体的设备。
源:硬盘File 目的:硬盘File
4.是否要其他功能
要高效 buffer
BufferedInputStream bufis = new BufferedInputStream(new FileInputStream(("e:\\全世界谁倾听你.mkv"));
BufferedOutputStream bufos = new BufferedOutputStream(new FileOutputStream(("d:\\全世界谁倾听你.mkv")));
int len = 0;
while((len = bufis.read())!=-1){
bufos.write(len);
}
bufos.close();
bufis.close();
2.需求2:在控制台输入,打印到e:demo.txt文件中
分析:
1.明确源和目的(汇)
Inputstream OutputStream
2.明确数据是否是纯文本数据
Inputstream OutputStream
3.明确具体的设备。
源:控制台system.in 目的:硬盘File
4.是否要其他功能
要高效 buffer
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileInputStream("e:b.txt")));
while((line=bfr.readLine())!=null){
if("over".equals(line)){
break;
}
bfw.write(line.toUpperCase());
bfw.newLine();
bfw.flush();
}