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

 

posted @ 2022-04-06 21:21  虞美人体重90  阅读(38)  评论(0编辑  收藏  举报