zoukankan      html  css  js  c++  java
  • Java IO ---学习笔记(缓冲流)

    缓冲流:

    类 BufferedInputStream 和 BufferedOutputStream 实现了带缓冲的过滤流,它提供了缓冲机制,把任意的 I/O 流“捆绑”到缓冲流上,可以提高 I/O 流的读取效率。

      在初始化时,除了要指定所连接的 I/O 流之外,还可以指定缓冲区的大小。缺省时是用32字节大小的缓冲区;最优的缓冲区大小常依赖于主机操作系统、可使用的内存空间以及机器的配置等;一般缓冲区的大小为内存页或磁盘块等的整数倍。

       BufferedInputStream 的数据成员 buf 是一个位数组,默认为2048字节。当读取数据来源时例如文件,BufferedInputStream 会尽量将 buf 填满。当使用 read ()方法时,实际上是先读取 buf 中的数据,而不是直接对数据来源作读取。当 buf 中的数据不足时,BufferedInputStream 才会再实现给定的 InputStream 对象的 read() 方法,从指定的装置中提取数据。

       BufferedOutputStream 的数据成员 buf 是一个位数组,默认为512字节。当使用 write() 方法写入数据时,实际上会先将数据写至 buf 中,当 buf 已满时才会实现给定的 OutputStream 对象的 write() 方法,将 buf 数据写至目的地,而不是每次都对目的地作写入的动作。   

    构造方法:

    //[ ]里的内容代表选填
    BufferedInputStream(InputStream in[,int size])
    BufferedOutputStream(OutputStream out[,int size])

    举个例子,将缓冲流与文件流相接:

    FileInputStream in = new FileInputStream("file.txt");
    FileOutputStream out = new FileOutputStream("file2.txt");
    //设置输入缓冲区大小为256字节
    BufferedInputStream bin = new BufferedInputStream(in,256)
    BufferedOutputStream bout = new BufferedOutputStream(out,256)
    int len;
    byte bArray[] = new byte[256];
    len = bin.read(bArray); //len 中得到的是实际读取的长度,bArray 中得到的是数据

    对于 BufferedOutputStream,只有缓冲区满时,才会将数据真正送到输出流,但可以使用 flush() 方法人为地将尚未填满的缓冲区中的数据送出。

    public void copy(InputStream in, OutputStream out) throw IOException {
        out = new BufferedOutputStream(out, 4096);
        byte[] buf = new byte[4096];
        int len = in.read(buf);
        while (len != -1) {
        out.write(buf, 0, len);
        len = in.read(buf);
        }
        //最后一次读取得数据可能不到4096字节
        out.flush();
    }
  • 相关阅读:
    day56 js收尾,jQuery前戏
    解决:No module named 'haystack.urls'
    用PicGo+Gitee(码云)搭建Markdown图床
    Python正课138 —— 基础扩展4 django
    Python正课140 —— DRF 进阶1 序列化、增删改查
    Markdown基本语法
    Python正课139 —— DRF 入门1
    用PicGo+GitHub+Typora搭建个人图床
    解决django.core.exceptions.ImproperlyConfiguredmysqlclient 1.3.13 or
    解决:Django中AttributeError:'str'objects has no attribute 'decode'
  • 原文地址:https://www.cnblogs.com/silianbo/p/4666415.html
Copyright © 2011-2022 走看看