• 带缓存的输入输出流


    一.带缓存的输入输出流

        缓存可以说是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("
    这是清空前缓存方式写入的字符串");
    20             
    21             //自动管理缓存:
    22             //自动写入:1.缓存满了  2.缓存关闭之前
    23             
    24             bw.flush();//主动清空缓存,写入数据
    25             
    26             bw.write("
    这是清空后缓存方式写入的字符串");
    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 }
    缓存

    小结:

           

  • 相关阅读:
    vs 编译加速
    leetcode 1405
    sort 从大到小从小到大
    leetcode1404
    leetcode 1406
    leetcode 1556
    杭电研究生自动登录联网脚本
    Cannot mix incompatible Qt library (version ) with this library (version ) 解决方案
    目标检测算法优化技巧
    特征工程和模型融合--机器学习--思维导图和笔记
  • 原文地址:https://www.cnblogs.com/arxk/p/5279978.html
Copyright © 2020-2023  润新知