IO——字节缓冲流
缓冲流:BufferedInputStream / BufferedOutputStream
- 提高IO效率,减少访问磁盘的次数
- 数据存储在缓冲区,调用flush将缓存区的内容写入文件中,也可以直接close
BufferedInputStream 继承 FilterInputStream.
在创建BufferedInputStream时,会创建一个内部缓冲区数组。
构造方法:
- BufferedInputStream(InputStream in) //创建一个BufferedInputStream并保存其参数,即输入流in,以便将来使用
- BufferedInputStream(InputStream in,int size) //创建具有指定缓冲区大小的BufferedInputStream并保存其参数,即输入流in,以便将来使用
方法: int availble() //返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字数
void close() //关闭此输入流并释放与该流关联的所有系统资源
void mark(int readlimit) //在此输入流中标记当前位置
abstract int read() //从输入流中读取数据的下一个字节
int read(byte[] b) //从输入流中读取一定数量的字节,并将其存储在缓存区数组b中
int read(byte[] b, int off, int len) //在指定位置将输入流中最多len个数据字节读入b数组
void reset() //将此流重新定位到最后一次对此输入流调用mark方法时的位置
long skip(long n) //跳过和丢弃此输入流中数据的n个字
BufferedOutputStream 与FileOutputStream的方法大致相同,此处省略了就
两者的使用如下
package com.java.leetcode.io; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; /* 使用字节缓冲流 */ public class Buffered01 { public static void main(String[] args) throws IOException { FileInputStream fis = new FileInputStream("D:\\stream01.txt"); BufferedInputStream bis = new BufferedInputStream(fis); //读取 // int data = 0; //一次读一个 // while ((data = bis.read()) != -1){ // System.out.print((char)data); // } //也可以自己创建缓冲区 //bis 和 buffer都是缓冲区 byte[] buffer = new byte[1024]; int count = 0; while ((count=bis.read(buffer)) != -1){ System.out.print(new String(buffer,0,count)); } bis.close(); //fis可不关闭 FileOutputStream fos = new FileOutputStream("D:\\stream01.txt",true); BufferedOutputStream bos = new BufferedOutputStream(fos); //写入文件 for (int i = 0; i < 2; i++) { bos.write("buffered".getBytes()); //先写入缓冲区,没有真正写入文件 bos.flush();//写一次刷新一次,此时才刷新到硬盘。效率不高,但是可以防止数据的丢失 } bos.close();//fos可不关闭,这里调用close()时,内部会调用flush System.out.println(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律