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、程序运行结果

相关推荐
shaoing1 分钟前
MySQL 错误 报错:Table ‘performance_schema.session_variables’ Doesn’t Exist
java·开发语言·数据库
The Future is mine42 分钟前
Python计算经纬度两点之间距离
开发语言·python
Enti7c43 分钟前
HTML5和CSS3的一些特性
开发语言·css3
腥臭腐朽的日子熠熠生辉1 小时前
解决maven失效问题(现象:maven中只有jdk的工具包,没有springboot的包)
java·spring boot·maven
爱吃巧克力的程序媛1 小时前
在 Qt 创建项目时,Qt Quick Application (Compat) 和 Qt Quick Application
开发语言·qt
ejinxian1 小时前
Spring AI Alibaba 快速开发生成式 Java AI 应用
java·人工智能·spring
杉之1 小时前
SpringBlade 数据库字段的自动填充
java·笔记·学习·spring·tomcat
圈圈编码1 小时前
Spring Task 定时任务
java·前端·spring
俏布斯1 小时前
算法日常记录
java·算法·leetcode
独好紫罗兰2 小时前
洛谷题单3-P5719 【深基4.例3】分类平均-python-流程图重构
开发语言·python·算法