Buffered
BufferedOutputStream 在向硬件设备做写出操作时,增大写出次数无疑会降低写出效率,为此我们可以使用缓冲输出流来一次性批量写出若干数据减少写出次数来提高写出效率。BufferedOutputStream缓冲输出流内部维护着一个缓冲区,每当我们向该流写数据时,都会先将数据存入缓冲区,当缓冲区已满时,缓冲流会将数据一次性全部写出。
flush 方法 使用缓冲输出流可以提高写出效率,但是这也存在一个问题,就是写出数据缺乏即时性。有时需要在执行完某些写出操作后,就希望将这些数据确实写出,而不是在缓冲区中保存知道缓冲区满后才写出。这就需要flush方法了。
BufferedInputStream BIS是一个处理流,该流为我们提供了缓冲功能。在读取数据时若以字节为单位读取数据,会导致读取次数过于频繁从而大大降低读取效率。为此我们可以通过提高一次读取的字节数量减少读写次数来提高读取的效率。BufferedInputStream是缓冲字节输入流。其内部维护着一个缓冲区(字节数组),使用该流在读取一个字节时,该流会尽可能多的一次性读取若干字节并存入缓冲区,然后逐一的将字节返回,直到缓冲区中的数据被全部读取完毕,会再次读取若干字节从而反复,这样就减少了读取的次数,提高了读取效率。
public static void main(String[] args) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
writeBuffer("D:\\b.txt","\r\nINFO Time:"+simpleDateFormat.format(new Date().getTime())+" hello world");
readBuffer("D:\\b.txt");
}
public static void writeBuffer(String pathName , String str) {
try (
// true 表示 是否追加,true:追加 false:覆盖
FileOutputStream output = new FileOutputStream(new File(pathName),true);
// 所有的字节被存入缓冲区,等待一次性写出
BufferedOutputStream bos = new BufferedOutputStream(output);
){
byte[] b = str.getBytes();
bos.write(b);
bos.flush(); //强制将缓冲区已缓存数据一次性写出
System.out.println("写出完毕");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void readBuffer(String pathName) {
try (
BufferedInputStream bufferedInput =
new BufferedInputStream(new FileInputStream(pathName));
){
int len = 0;
byte[] buffer = new byte[1024];
//从文件中按字节读取内容,到文件尾部时read方法将返回-1
while ((len = bufferedInput.read(buffer)) != -1) {
//将读取的字节转为字符串对象
String info = new String(buffer, 0, len);
System.out.print(info);
}
} catch (Exception e) {
e.printStackTrace();
}
}