zoukankan      html  css  js  c++  java
  • 66. 缓存字节流

    我们清楚操作文件数据使用缓冲数组读取效率更高,sun公司给我们提供了一个缓冲字节流,可以让我们更高效率操作文件

    缓冲输入字节流:
    ----------------------| InputStream 输入字节流的基类
    ----------------| FileInputStream  读取文件的输入字节流
    ----------------| BufferedInputStream  缓冲输入字节流   作用:提高读取文件的效率
    注意:BufferedInputStream其实底层创建了一个8kb的字节数组,跟我们自定义创建一个字节数组实现原理一样的

    构造方法:
    BufferedInputStream(InputStream in) 创建一个 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。
    BufferedInputStream(InputStream in, int size)  创建具有指定缓冲区大小的 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。




    缓冲输出字节流:
    ----------------------| OutputStream 输出字节流的基类
    ----------------| FileOutputStream 写入文件的输入字节流
    ----------------| BufferedOutputStream 缓冲输出字节流 作用:提高我们写入数据的效率
    注意:BufferedOutputStream底层也是创建了一个8kb的字节数组,当我们在使用write方法的时候,数据其实存在了字节数组中,并没有写入文件中
    当我们关闭文件,或者使用flush方法,或则字节数组存满,才会把数据写入文件中

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

    成员函数:
    flush()      刷新此缓冲的输出流(也就是把字节数组中的数据写入文件中)。



    注意:缓冲字节流本身并不具备读写文件能力



    最后讲解一下容易混淆的一些函数(能力有限,可能说的不够明确):
    fileInputStream.read(buf)     返回每次读取数据的长度,没有则返会-1
    fileInputStream.read()       返回的是每次读取的数据,没有则返会-1

    bufferedInputStream.read()    当读取到数据返回的是底层字符数组的数据,当没有读取到数据,会返回-1
    bufferedInputStream.read(buf)   返回的是缓存到缓存数组中的字节总数(这个是父类的方法)当没有读取到数据,会返回-1


    需求:拷贝图片

    public class Demo1 {
        public static void main(String[] args) {
            File inputfile = new File("D:\新建文件夹\1.jpg");
            File outputfile = new File("D:\新建文件夹 (2)\1.jpg");
            BufferedInputStream bufferedInputStream = null;
            BufferedOutputStream bufferedOutputStream = null;
            try {
                FileInputStream fileInputStream = new FileInputStream(inputfile);
                FileOutputStream fileOutputStream = new FileOutputStream(outputfile);
                bufferedInputStream = new BufferedInputStream(fileInputStream);
                bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
                int content = 0;
                while((content = bufferedInputStream.read())!=-1) {
                    bufferedOutputStream.write(content);
                }
            }catch(IOException e) {
                throw new RuntimeException(e);
            }finally {
                try {
                    bufferedOutputStream.close();
                }catch(IOException e) {
                    throw new RuntimeException(e);
                }finally {
                    try {
                        bufferedInputStream.close();
                    } catch (IOException e) {
                        throw new RuntimeException(e);
                    }
                }
            }
        }
    }
  • 相关阅读:
    明明已经include_once() 但还是报错Class 'XXXXXControllerTOPData' not found
    dell U2515H 2k显示器黑屏问题,dp线问题。
    centos7.4 php5升级到php7
    thinkphp批量插入 更新sql
    查询速度慢了10倍,查询条件类型不对,字符串当做数字类型。
    margin-left:auto;margin-right:auto; 不起作用的原因
    jquery 查找元素,id,class
    php分割url,获取参数query
    阿里云服务器删除日志的方法,查看有哪些大文件
    sql优化 分字段统计查询
  • 原文地址:https://www.cnblogs.com/zjdbk/p/9064336.html
Copyright © 2011-2022 走看看