----------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------
黑马程序员_java基础流操作(文件)篇Day3
今天听了毕老师的第二部分java视频,对知识做一个总结,同时也加上自己的理解。
流操作是相当有趣的一个话题,写文件,读文件,读图片,读视频(妈妈再也不用担心我们的学习了,想读哪里读哪里),虽然可以读很多的东西,但一见到文件的操作对象就犯晕,其实听毕老师已将,也就那么回事(是不是有那么一点夸张啊)。
我们先把这些对象列出来。
#第一部分#
输入流:InputStream Reader 读
输出流:OutStream Writer 写
加上两个常用的转换流对象InputStreamReader将输入的字节流变为字符流, OutputStreamWriter将一个字符流的输出对象变为字节流输出对象。
Buffered
如果我们想提高效率,我们就会用到Buffered,也就是我们的缓冲区。缓冲区的出现就是为了提高效率的。同时Buffered也提供了新的有效方法如newline(),readLine()。
我们在这可以看一个缓冲区的例子:
For(int x=0;x<5;x++)
{
Buff.write(“abcd”);
buff.newLine();
Buff.flush();
}
不要Buff.flush();行吗?不行,由于字符是属于缓冲区的,但我们不刷新又开始写,那么以前的将会被覆盖。
readLine()中一个容易出错的例子
While(buff.readLine()!=null){
System.out.printf(buff.readLine());
}
这样会报错,应加上str=buff.readLine()
ReadLine()的原理,无论是读取一行,获取多个字符,其实最终都是在硬盘上一个个读取的,所以最终是要的还是read方法。
这里有一个必须注意的:
FileWriter并不直接是Writer的子类,而是OutputStreamWriter的子类, 而FileReader也不直接是Reader的子类, 是InputStreamReader的子类,那么从这两个类的继承关系就可以清楚地发现, 不管是使用字节流还是字符流实际上最终都是以字节的形式操作输入/输出流的。
#第二部分#
流操作的规律,就要掌握三个要点,开始前我们就问自己三个问题
第一:明确输入流于输出流,就是我要读的是什么?
文本?是的则用字符流对象Reader,为什么不用InputStream?因为一般我们读取文本都用字符流,这涉及字符流编码的问题。
第二:Reader选好了,我们还要想一想是什么设备输入的,如果是文件用FileReader,但是如果用的是键盘呢?那转换流就派上用场了,System.in是字节流,我们要将他转化为
字符流,InputStreamReader isr=new InputStreamReader (System.in);这是从键盘接收。
第三:做好了上面的两步,说明我们,可以建立了读的流对象,fr.read()/isr.read()
我们可以读取了,但是我们也想提交效率,怎么办,这是Buffered上场了,
我们以个例子来看看效率:
部分代码:
没用Buffered读的视频
fis=new FileInputStream("D:\\1234567.avi");
fos=new FileOutputStream("D:/happy.avi");
byte[] b=new byte[1024];
int len=0;
while((len=fis.read(b))!=-1)
{
fos.write(b);
}
用Buffered读
fis=new FileInputStream("D:\\1234567.avi");
bis=new BufferedInputStream(fis);
fos=new FileOutputStream("D:/happy.avi");
bos=new BufferedOutputStream(fos);
byte[] b=new byte[1024];
int len=0;
while((len=bis.read(b))!=-1)
{
bos.write(b);
}
再来看一个例子
1,从键盘上读取一个字符到文件
InputStreamReader isr=new InputStreamReader(System.in);
// int a=isr.read();
BufferedReader br=new BufferedReader(isr);
int a=br.read();
FileWriter fw=new FileWriter("D:/demo.txt");
fw.write(a);
//System.out.println((char)(a));
br.close();
fw.close();
其实读取图片,视频的原理都一样,这里就不在啰嗦了,继续看视频去!
----------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------