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

devtools/2024/12/22 19:44:57/

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


http://www.ppmy.cn/devtools/144459.html

相关文章

gitee给DeployKey添加push权限

git执行push操作&#xff0c;将本地修改推送到gitee远程仓库时&#xff0c;报错&#xff1a; error: src refspec master does not match any error: failed to push some refs to gitee.com:XXX/XXX.git进一步执行以下强制推送命令&#xff1a; $ git push --set-upstream o…

Facebook 与数字社交的未来走向

随着数字技术的飞速发展&#xff0c;社交平台的角色和形式也在不断演变。作为全球最大社交平台之一&#xff0c;Facebook&#xff08;现Meta&#xff09;在推动数字社交的进程中扮演了至关重要的角色。然而&#xff0c;随着互联网的去中心化趋势和新技术的崛起&#xff0c;Face…

React简单了解

原理简化了解 import React from "react" import { createRoot } form "react-dom/client"const element React.createElement(p,{id: hello},Hello World! )const container document.querySelector(#root) const root createRoot(container) root.r…

代码随想录刷题-数组

文章目录 1.二分查找1.答案2.思路3.扩展题目1.搜索插入位置1.答案2.思路 2.在排序数组中查找元素的第一个和最后一个位置1.答案2.思路 3.x 的平方根1.答案2.思路 4.有效的完全平方数1.答案2.思路 4.总结1.标准二分模板 2.移除元素1.答案2.思路3.扩展题目1.删除有序数组中的重复…

深入理解STL list erase

1、list erase后&#xff0c;当前的迭代器失效&#xff0c;返回指向下一个节点的迭代器 #include<list> #include<iostream> #include<vector> using namespace std;int main() {list<int> ls;ls.push_back(1);ls.push_back(2);ls.push_back(3);list&…

如何在谷歌浏览器中设置家庭安全

在数字时代&#xff0c;保护家庭成员尤其是儿童的网络安全变得尤为重要。谷歌浏览器提供了一些实用的功能来帮助家长管理孩子的上网行为。本文将详细介绍如何在谷歌浏览器中设置家庭安全&#xff0c;包括启用加速访问模式、管理存储权限以及使用地址栏快捷搜索技巧。&#xff0…

在 Ubuntu 上安装 Muduo 网络库的详细指南

在 Ubuntu 上安装 Muduo 网络库的详细指南 首先一份好的安装教程是非常重要的 C muduo网络库知识分享01 - Linux平台下muduo网络库源码编译安装-CSDN博客 像这篇文章就和shit一样&#xff0c;安装到2%一定会卡住&#xff0c;如果你不幸用了这个那真是遭老罪了 环境&#xf…

文件,IO流

目录 一 java 1. IO流 1&#xff09;输入输出&#xff08;以程序的视角判断 &#xff09; 1.1 IO流的分类 1&#xff09;字符流效率高于字节流 1.2 流和文件的关系 2. inputstream--字节输入流 2.1 fileinputstream 2.1.1常用方法&#xff1a; 1&#xff09;单个字符…