java中带缓存的输入/输出流

1、介绍

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

2、BufferedInputStream与BufferedOutputStream类

BufferedInputStream类可以对所有InputStream类进行带缓存区的包装以达到性能的优化。

2.1 BufferedInputStream类有两个构造方法。
  1. BufferedInputStream(InputStream in):创建了带有32个字节的缓存流
  2. BufferedInputStream(InputStream in,int size):按指定的大小来创建缓存区

一个最优的缓存区的大小,取决于它所在的操作系统、可用的内存空间以及机器配置。BufferedInputStream对象位于InputStream对象之前。

2.2 BufferedOutputStream类两个构造方法
  1. BufferedOutputStream(OutputStream in)
  2. BufferedOutputStream(OutputStream in,int size)

使用BufferedOutputStream输出信息和用OutputStream输出信息完全一样,只不过BufferedOutputStream有一个flush()方法用来将缓存区的数据强制输出完。

说明:flush()方法就是用于即使缓存区没有满的情况下,也将缓存区的内容强制写入到外设,习惯上称这个过程围为刷新。flush()方法只对使用缓存区的OutputStream类的子类有效。当调用close()方法时,系统在关闭之前,也会将缓存区中的信息刷新到磁盘文件中。

3、BufferedReader与BufferedWriter类

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

3.1 根据BufferedReader类的特点,总结如下的字符数据读取文件的过程
  1. 字符数据
  2. BufferedWriter
  3. OutputStreamWriter
  4. OutputStream
  5. 文件
3.2 BufferedReader类常用的方法
  • read()方法:读取单个字符
  • readLine()方法:读取一个文本行,并将其返回字符串。若无数据可读,则返回null。BufferedWriter类中的方法都返回void。常用方法如下:
  1. writer(String s,int off,int len)方法:写入字符串的某一部分
  2. flush()方法:刷新该流的缓存
  3. newLine()方法:写入一个行分隔符。

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

4、程序代码(列子)

题目:向指定的磁盘文件中写入数据,通过BufferedReader类将文件中的信息分行显示。(使用newLine()方法)

java 复制代码
import java.io.*;


public class BufferedRWTest {
    public static void main(String[] args){
        String content[]={"Hellow","你还在吗","在吗在吗"};//定义字符串数组
        File file=new File("word.txt");//创建文件对象
        try{
            FileWriter writer=new FileWriter(file);//创建FileWriter对象
            BufferedWriter bufferedWriter=new BufferedWriter(writer);//创建BufferedWriter类对象
            for(int k=0;k<content.length;k++){//循环遍历数组
                bufferedWriter.write(content[k]);//将字符串数组中的元素写入到磁盘文件中
                bufferedWriter.newLine();//将数组中的单个元素以单行的形式写入文件
            }
            bufferedWriter.close();//关闭BufferedWriter流关闭
            writer.close();//关闭FileWriter流关闭
        }
        catch (Exception e){
            e.printStackTrace();//处理异常信息
        }
        try {
            FileReader reader=new FileReader(file);//创建FileReader类对象
            BufferedReader bufferedReader=new BufferedReader(reader);//创建BufferedReader类对象
            String s=null;//创建字符串对象
            int i=0;//声明int型变量
            //如果文件的文本行数不为null,则进入循环
            while ((s=bufferedReader.readLine())!=null){
                i++;//将变量做自增运算
                System.out.println("第"+i+"行:"+s);//输出文件数据
            }
            bufferedReader.close();//关闭BufferedReader流
            reader.close();//关闭FileReader流
        }
        catch (Exception e1){//处理异常信息
            e1.printStackTrace();
        }
    }
}

5、程序运行结果

相关推荐
mask哥8 分钟前
详解最新链路追踪skywalking框架介绍、架构、环境本地部署&配置、整合微服务springcloudalibaba 、日志收集、自定义链路追踪、告警等
java·spring cloud·架构·gateway·springboot·skywalking·链路追踪
XU磊26011 分钟前
javaWeb开发---前后端开发全景图解(基础梳理 + 技术体系)
java·idea
我最厉害。,。13 分钟前
PHP 反序列化&原生类 TIPS&字符串逃逸&CVE 绕过漏洞&属性类型特征
android·开发语言·php
爱编程的鱼14 分钟前
C# 类(Class)教程
开发语言·c#
学也不会14 分钟前
雪花算法
java·数据库·oracle
2301_8170316522 分钟前
C语言-- 深入理解指针(4)
c语言·开发语言·算法
晓华-warm23 分钟前
国产免费工作流引擎star 5.9k,Warm-Flow版本升级1.7.0(新增大量好用功能)
java·中间件·流程图·开源软件·flowable·工作流·activities
superior tigre24 分钟前
C++学习:六个月从基础到就业——模板编程:模板特化
开发语言·c++·学习
凭君语未可26 分钟前
介绍 IntelliJ IDEA 快捷键操作
java·ide·intellij-idea
yyywxk40 分钟前
Matlab 报错:尝试将 SCRIPT vl_sift 作为函数执行:
开发语言·matlab