带缓存的字符输入输出流

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

大纲:

BufferedReader类与BufferWriter类

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

根据BufferedReader类的特点,可总结出字符数据读取文件的过程:字符数据==》BuffereaWriter==》OutoutStreamWriter==》OutoutStream==》文件。

BufferedReader类常用的方法如下:

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

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

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

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

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

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

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();
        }

    }

}

时间: 2024-08-26 04:37:25

带缓存的字符输入输出流的相关文章

带缓存的输入流输出流

1 import java.io.BufferedInputStream; 2 import java.io.BufferedOutputStream; 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 8 public class TestBufferedStrea

字符流;字节流;带缓冲的输入输出流;以及用scanner读文件

概念: InputStream类是字节输入流的抽象类,是所有字节输入流的父类. OutputStream类是字节输入流的抽象类,是所有字节输出流的父类. In(可以理解为读)Out(可以理解为写) 一.字节流的读与写 FileInputStream类与FileOutStream类都是用来操作磁盘文件的. 1. FileInputStream(String name); 填String类型的路径名 FileInputStream(File file); 填入File对象 2. FileOutStr

BufferedInputStreamTest 带缓存的字节输入流

package IOliu; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public cla

蓝桥杯 地宫寻宝 带缓存的DFS

最近一个问题很困扰我,今天则得到了答案,也意味着我该选择了. 不知道大家有没有遇到过这样的情况,我是上年刚毕业,大四时进行过java培训,12年9月-13年4月,在这之前已经自学过java.7月份时进入一家公司工作,今年3月份辞职,4月份找到工作,来上班了.一开始就不太喜欢公司氛围,前台,hr,态度什么的都不太好,工作环境也极像客服部,整天电话不断,讨论声不断,第一个星期真是煎熬,去了两三天之后有辞职的想法,但是后面想想还是算了,公司待遇还可以. 但是进入到公司后leader让学PHP,学PHP

字符输入输出流

package com.sxt.copy2; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.Reader; import java.io.Writer; /* * 字符输入输出流 * Reader * Writer */ public class TestCopy { pub

AVPlayer封装的带缓存的视频播放器

使用AVPlayer封装实现了本地视频播放,以及边下边播在线视频,缓存完成后将视频保存在本地文件夹中,下次播放时直接从本地播放.并且实现了左右滑动快进快退视频.上下滑动调整音量,以及全屏功能. HcdCachePlayer 带缓存的播放器,使用AVPlayer封装开发. 简单介绍 HcdCacheVideoPlayer实现了边下边播在线视频,并且能将在线视频缓存在本地,支持左右滑动手势来调整视频播放进度,上下滑动手势调节音量大小,并且支持全屏播放.此控件使用了Masonry自动布局来实现全屏播放

Yii的自带缓存的使用

Yii的自带缓存都继承CCache 类, 在使用上基本没有区别缓存基础类 CCache 提供了两个最常用的方法:set() 和 get().要在缓存中存储变量 $value,我们选择一个唯一 ID 并调用 set() 来存储它: Yii::app()->cache->set($id, $value); 被缓存的数据会一直保留在缓存中,直到因一些缓存策略而被删除(比如缓存空间满了,删除最旧的数据).要改变这一行为,我们还可以在调用 set() 时加一个过期参数,这样数据过一段时间就会自动从缓存中

TimesTen 数据库复制学习:11. ASP带缓存组复制的几种固定架构模式

概述 对于带缓存组的复制,推荐的复制策略是 Active-Standby (A/S) pair.因为其复制整个库,并且复制和恢复都比较简单和直接,而且错误切换和恢复都是自动的. 带AWT缓存组的ASP复制 - 单站点 此种复制不支持灾备 注意数据的流向 带只读缓存组的ASP复制 注意数据的流向 带AWT缓存组的ASP复制 - 多站点 此种复制支持灾备 从standby到subscriber的克隆使用特殊的ttRepadmin复制选项 参考 HOWTO : Understand Combining

TimesTen 数据库复制学习:8. 管理Active Standby Pair(带缓存组)

带缓存组的Active standby pairs(ASP) 在不带缓存组的ASP中,复制发生在TimesTen的表间:而在带缓存组的ASP中,复制发生在cache table之间.带缓冲组的复制仅支持只读和AWT缓存组.对于只读缓存组,复制的意义在于保持状态的连续,而对于AWT,复制可以保证数据不丢失. 设置带只读缓存组的ASP(例) 假设active master为cachedb1,standby master为cachedb2 在active上创建dynamic readonly缓存组 c