IO框架(三)字节缓冲流

IO框架(三)字节缓冲流

缓冲流内容和目的

  • 缓冲流:BufferedInputStream/BufferedOutputStream
  • 作用:
    • 提高IO效率,创建一个缓冲区,减少访问磁盘的次数
    • 数据存储在缓冲区中,flush是将缓存区的内容写入文件中,也可以直接close

BufferedInputStream

  • BufferedInputStream为输入流添加了一些功能(如缓冲输入支持mark和支持reset的能力)

BufferedInputStream方法

protected byte[] buf ---> 存储数据的内部缓冲区数组。
protected int count ---> 索引一大于缓冲区中最后一个有效字节的索引。
protected int marklimit ---> mark方法调用后,最大超前允许,后续调用 reset方法失败。
protected int markpos ---> pos字段在最后一个 mark方法被调用时的值。
protected int pos ---> 缓冲区中的当前位置。

BufferedInputStream构造方法

BufferedInputStream(InputStream in) 创建一个 BufferedInputStream并保存其参数,输入流 in ,供以后使用。
BufferedInputStream(InputStream in, int size) 创建 BufferedInputStream具有指定缓冲区大小,并保存其参数,输入流 in ,供以后使用。

BufferedInputStream举例

  • 举例1

    public class Demo04 {
        public static void main(String[] args) throws Exception{
            //创建输入流
            FileInputStream fis=new FileInputStream("D:\\aaa.txt");
            //将输入流放入缓冲区中
            BufferedInputStream bis=new BufferedInputStream(fis);
            //读取
            int data=0;
            while ((data=bis.read())!=-1){
                System.out.println((char)data);
            }
            bis.close();
        }
    }
    //输出:
    a
    b
    c
    d
    e
    f
    g
    
  • 举例2

    public class Demo05 {
        public static void main(String[] args) throws Exception{
            //创建输入流
            FileInputStream fis=new FileInputStream("D:\\aaa.txt");
            //将输入流放入缓冲区中
            BufferedInputStream bis=new BufferedInputStream(fis);
            //读取
            byte[] buf=new byte[1024];
            int count=0;
            while ((count=bis.read(buf))!=-1){
                System.out.println(new String(buf,0,count));
            }
            //关闭
            bis.close();
        }
    }
    //输出:
    abcdefg
    

BufferedOutputStream

  • BufferedOutputStream可以将数据写入到缓冲流,而不是文件中,只是作为辅助

BufferedOutputStream方法

void flush() 刷新缓冲输出流,(将数据从缓冲区存入文件中)
void write(byte[] b, int off, int len) 从指定的字节数组写入 len个字节,从偏移 off开始到缓冲的输出流。
void write(int b) 将指定的字节写入缓冲的输出流

BufferedOutputStream构造方法

BufferedOutputStream(OutputStream out) 创建一个新的缓冲输出流,以将数据写入指定的底层输出流。
BufferedOutputStream(OutputStream out, int size) 创建一个新的缓冲输出流,以便以指定的缓冲区大小将数据写入指定的底层输出流。

BufferedOutputStream举例

  • 举例1

    public class Demo06 {
        public static void main(String[] args) throws Exception{
            FileOutputStream fos=new FileOutputStream("D:\\ccc.txt");
            //创建缓冲区并放入输出流
            BufferedOutputStream bos=new BufferedOutputStream(fos);
            //写入缓冲区(是写入缓冲区不是输出流(文件))
            for(int i=0;i<10;i++){
                //将文字以字节的形式存入
                bos.write("hello\n".getBytes());//写入缓冲区
            }
            //写入(覆盖)文件中
            bos.flush();//刷新到硬盘
        }
    }
    
posted @ 2022-02-10 16:20  史小鹏  阅读(51)  评论(0)    收藏  举报