首页 > 其他 > 详细

带缓存字符输入输出流

时间:2016-03-15 23:19:56      阅读:266      评论:0      收藏:0      [点我收藏+]

一.带缓存的输入输出流

    缓存可以说是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()方法。

 

 

带缓存输入输出流代码:

技术分享
package com.hanqi;

import java.io.*;

public class TestFile4 {

    public static void main(String[] args) {
        
        
        try 
        {
            File f=new File("d:\\test.txt");
        
            //带缓存
            //Writer接口的实现类
            FileWriter fw=new FileWriter(f,true);
            
            //缓存写入类,构造时需要传入Writer实例
            BufferedWriter bw=new BufferedWriter(fw);
        
            bw.write("\n这是缓存方式写入的字符串");
        
            //自动管理缓存
            //自动写入:1.缓存满了 2.缓存关闭之前
            
            bw.flush();//主动清空缓存,写入数据
            
            bw.write("\n这是清空后缓存方式写入的字符串");
            
            bw.close();
            fw.close();
            
            System.out.println("写入完成");
            
            //缓存读
            
            FileReader fr=new FileReader(f);
            
            BufferedReader br=new BufferedReader(fr);
            
            
            //第一次读
//            String str=br.readLine();
//            
//            System.out.println(str);
//            
//            while(str!=null)
//            {
//                System.out.println(str);
//                
//                str=br.readLine();
//            }
            
            while(true)
            {
                String str=br.readLine();
                
                if(str==null)
                {
                    break;
                }
                System.out.println(str);
            }
            
            
            
            
        }
        catch (IOException e)
        {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
        
        

    }

}
View Code

技术分享

技术分享

带缓存字符输入输出流

原文:http://www.cnblogs.com/cycanfly/p/5281522.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!