带缓存的输入输出流

一.带缓存的输入输出流

    缓存可以说是I/O的一种性能优化。缓存流为I/O流增加了内存缓存区。有了缓存区,使得在流上执行skip()、mark()和reset()方法都成为可能。

   1.BufferedInputStream类和BufferedOutputStream类

      (1)BufferedInputStream类可以对任意的InputStream类进行带缓存区的包装以达到性能的优化。

             BufferedInputStream类有两个构造函数:

                                     BufferedInputStream(InputStream  in);

                                     BufferedInputStream(InputStream  in,int  size);

            第一种形式的构造函数创建了一个带有32个字节的缓存流;第二种形式的构造函数按指定的大小来创建缓存区。一个最优的缓存区的大小,取决于它所在的操作系统、可用的内存空间以及机器配置。从构造函数可以看出,BufferedInputStream对象位于InputStream类对象之前。
      
      (2)BufferedOutputStream输出信息和向OutputStream输入信息完全一样,只不过BufferedOutputStream有一个flush()方法用来将缓存区的数据强制输出完。
             BufferedOutputStream类也有两个构造方法:
                                       BufferedOutputStream(OutputStream  in);
                                       BufferedOutputStream(OutputStream  in,int  size);
             第一种构造函数创建一个32个字节的缓存区,第二种形式以指定的大小来创建缓存区。
             注意:flush()方法就是用于即使缓存区没有满的情况下,也将缓存区的内容强制写入到外设,习惯上称这个过程为刷新。flush()方法只对使用缓存区的OutputStream类的子类有效。当调用close()方法时,系统在关闭流之前,也会将缓存区中信息刷新到磁盘文件中。 

    2.BufferedReader类与BufferedWriter类

       BufferedReader类与BufferedWriter类分别继承Reader类与Writer类。这两个类同样具有内部缓存制,并可以行为单位进行输入/输出。

       根据BufferedReader类的特点,总结出如图所示的字符数据读取文件的过程。

       BufferedReader类常用的方法如下:

      

           read()方法:读取单个字符;

           readLine()方法:读取一个文本行,并将其返回为字符串;若无数据可读,则返则返回null;

           write( String s,int off,int len)方法:写入字符串的某一部分;

           flush()方法:刷新该流的缓存。 

           newLine()方法:写入一个行分隔符。

      在使用BufferedWrite类的Writer()方法时,数据并没有立刻被写入至输出流中,而是首先进入缓存区中。如果想立刻将缓存区中的数据写入输出流中,一定要调用flush()方法。

 

 

带缓存输入输出流代码:

 1 package org.hanqi.ex;
 2 
 3 import java.io.*;
 4 
 5 public class TestFile4 {
 6 
 7     public static void main(String[] args) {
 8 
 9         try {
10             File f=new File("d:\\test.txt");
11             
12             //带缓存
13             //Writer接口的实现类
14             FileWriter fw= new FileWriter(f,true);
15                     
16             //缓存写入类,构造时需要传入Writer实例
17             BufferedWriter  bw=new BufferedWriter(fw);
18         
19             bw.write("\n这是清空前缓存方式写入的字符串");
20             
21             //自动管理缓存:
22             //自动写入:1.缓存满了  2.缓存关闭之前
23             
24             bw.flush();//主动清空缓存,写入数据
25             
26             bw.write("\n这是清空后缓存方式写入的字符串");
27             
28             bw.close();
29             fw.close();
30             
31             System.out.println("写入完成");
32             
33             //缓存读
34 
35             FileReader fr=new FileReader(f);
36             
37             BufferedReader  br=new BufferedReader(fr);
38             
39             
40             //第一次读
41 //            String str =br.readLine();
42 //            
43 //            
44 //            while(str!=null)
45 //            {
46 //                System.out.println(str);
47 //                
48 //                str=br.readLine();
49 //            }
50 
51             while (true)
52             {
53                 String str=br.readLine();
54                 
55                 if(str==null)
56                 {
57                     break;
58                 }
59                 
60                 System.out.println(str);
61             }
62 
63             
64         } catch (IOException e) {
65             // TODO 自动生成的 catch 块
66             e.printStackTrace();
67         }
68 
69         
70     }
71 
72 }
缓存

 

 

小结:

       

转载于:https://www.cnblogs.com/arxk/p/5279978.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值