赞
踩
缓冲输入流BufferedInputStream
缓冲输出流BufferedOutputStream
作用:提高读写速度。
属性:
构造方法:
方法
注:flush()方法的原理解释:缓冲区的大小很大,有几千个字节。这里举例设定缓冲区大小为20个字节,如果存放到缓冲区的数据刚好是20个字节,那么缓冲区的数据会自动执行写操作(write),例如将数据写入对应的FileOutputStream文件输出流中,并通过文件输出流写入文件;如果存入到缓冲区的数据只有10个字节,并没有存满,这时则不会触发write方法去执行写操作,就会导致我们没有将数据写入文件当中,就会出问题。因此,在缓冲区不满的时候,我们调用flush()方法进行缓冲区的强制清空。
操作的文件依然为D:\学习\eclipse_studyspace\IOProj
中的study.txt,其中内容为空。
package com.study.myfile; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class BufferedDemo { public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("study.txt"); FileOutputStream fos = new FileOutputStream("study.txt"); BufferedInputStream bis = new BufferedInputStream(fis); BufferedOutputStream bos = new BufferedOutputStream(fos); bos.write(50); bos.write('a'); } catch (FileNotFoundException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); } } }
运行发现,study.txt中依然是空的,没有内容。这里就验证了缓冲流是将数据写入缓冲区中了,并没有再将缓冲区中的数据写入study.txt中,这说明缓冲区未满,没有自动触发write方法执行写操作。
try {
FileInputStream fis = new FileInputStream("study.txt");
FileOutputStream fos = new FileOutputStream("study.txt");
BufferedInputStream bis = new BufferedInputStream(fis);
BufferedOutputStream bos = new BufferedOutputStream(fos);
bos.write(50);
bos.write('a');
bos.flush();
}
运行发现,study.txt中的内容为:
2a
try {
FileInputStream fis = new FileInputStream("study.txt");
FileOutputStream fos = new FileOutputStream("study.txt");
BufferedInputStream bis = new BufferedInputStream(fis);
BufferedOutputStream bos = new BufferedOutputStream(fos);
bos.write(50);
bos.write('a');
// bos.flush();
bos.close();
}
运行发现,study.txt中的内容依然为:
2a
发现数据依然写进来了,这说明:如果flush与close方法都不调用而缓冲区未满,是不会执行写操作(write)的。当调用flush与close中的任何一个方法后,都会强制清空缓冲区中剩余的内容。
package com.study.myfile; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class BufferedDemo { public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("study.txt"); FileOutputStream fos = new FileOutputStream("study.txt"); BufferedInputStream bis = new BufferedInputStream(fis); BufferedOutputStream bos = new BufferedOutputStream(fos); bos.write(50); bos.write('a'); bos.flush(); System.out.println(bis.read()); System.out.println((char)bis.read()); fos.close(); bos.close(); fis.close(); bis.close(); } catch (FileNotFoundException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); } } }
运行结果:
50
a
运行发现,study.txt中的内容为:
2a
获取系统的当前时间:
long startTime = System.currentTimeMillis();
返回值为长整型数据。计算方式是当前时间减1970年1月1日(程序就是这么设定的)。
查看flush方法的提高读写速度的作用:
try { FileInputStream fis = new FileInputStream("study.txt"); FileOutputStream fos = new FileOutputStream("study.txt"); BufferedInputStream bis = new BufferedInputStream(fis); BufferedOutputStream bos = new BufferedOutputStream(fos); long startTime = System.currentTimeMillis(); bos.write(50); bos.write('a'); bos.flush(); System.out.println(bis.read()); System.out.println((char)bis.read()); long endTime = System.currentTimeMillis(); System.out.println(endTime-startTime); fos.close(); bos.close(); fis.close(); bis.close(); }
这里由于文件较小看不出效果,需要大文件来进行测试。
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。