zoukankan      html  css  js  c++  java
  • Buffer类

    输入流中可以通过缓冲区来加大读取的效率,sun公司感觉可以加快执行效率,他就为我们提供了一个类来操作缓存区。

    Buffer来头的类:所有缓冲流都是以Buffer开头的;

    学习缓冲流的作用:

      BufferedInputStream:缓冲输入字节流,  目的:  提高读取文件的效率。

      注意点: BufferedInputSteam  他是没有读写数据的功能,

    内部实现:    里面维护了一个8字节的byte的数组

    BufferedInputStream  使用步骤:
      1.找到一个目标文件

      2.建立通道  FileInputStream  

      3.创建一个缓冲字节流输入流,里面传入一个InputStream

      4.读取数据

      5.关闭资源

    BufferedOutputStream:缓冲字节流输出流,内部维护一个 8 字节的数组

    作用: 提供文件的输出效率,可以提供其他的方法

    使用步骤:

        1.找目标

        2.建立通道  FileOutputStream 

        3.创建一个缓冲区字节流输出流

        4.写数据,不会写入到磁盘中,如果数组中的数据已经满了,会自动将数据写入到磁盘中

        5.将数据写入到磁盘:调用Flush(): h或者关闭资源

        6.关闭资源

    字符流:读的也是二进制文本,他会帮我们解码成我们看的懂得字符

    字符流 = 字节流 + 解码

    Reader:它是字符输入流的根类,抽象

    FileReader 文件字符输入流,读取字符串

    FileReader的用法:

     1.找到目标文件

     2.建立数据的通道

     3.建立一个缓冲区

     4.读取数据

     5.关闭资源

    一个汉字是占两个字节,字节流用的是read()一次只读取一个字节

    学习到的输入流: FileInputStream  BufferedInnputStream  FileReader 

    输入流:以InputStream或者Reader结尾

    输出字符流:Write :字符输出流根类 ,抽象的类

                     FileWrite  文件数据的输出字符流

    字符输出流的使用注意点:

        1.Filereader内部维护了一个1024个字符的数组,所以在写入数据的时候,它是现将数据写入到内部的字符数组中,如果需要将数据写入键盘中,需要用到flush()或者关闭或者字符数据存满了

        2.如果我们需要想文件中追加数据,需要使用new FileWrite(File,boolean)构造方法,第二个参数true

        3.如果指定的文件不存在,也会自己创建一个

    eg:用字符流来拷贝图片:

        字符流 = 字节流 + 解码 ----->找到对应的码表 GBK

        字符流解码:拿到系统默认的编码方式来解码

    将图片中的二进制数据和GBK码表中的值进行对比,对比的时候会出现二进制文件在码表中找不到嘴一个的值,他会将二进制数据标记为未知字符,当我在写入数据的是后台会将未知的字符丢掉

    图片数据不需要将数据解析为我们看的懂得字符

    使用字节流的场景:读写的数据不需要转为我能够看得懂的字符,比如:图片,视屏

    使用字符流的场景:如果读写的是字符数据

    public class Dmeo2 {

    /**
    * @param args
    * @throws IOException
    */
    public static void main(String[] args) throws IOException {
    // TODO Auto-generated method stub
    copyImg();
    }

    public static void copyImg() throws IOException{
    //1.找到指定的文件
    File file = new File("D:\images\03.jpg");
    File dir = new File("D:\03.jpg");

    //2.创建输入输出字符流
    FileReader fileReader = new FileReader(file);
    FileWriter fileWriter = new FileWriter(dir);

    //3.复制文件
    char[] c = new char[1024];
    int length = 0;
    while ((length = fileReader.read(c))!= -1) {

    fileWriter.write(c); //写入到内部维护的数组。
    fileWriter.flush(); // 刷新,让数据边度边写
    }
    fileWriter.close();
    fileReader.close();
    }

    }

    BufferedWrite:缓冲字符输出流:

       内部提供一个8192长度的字符数组作为这样一个缓冲区

    BufferedWrite作用:提高写入的效率,拓展FileWrite的功能。

  • 相关阅读:
    多线程
    异常处理
    面向对象-Object对象、匿名内部类
    接口、多态、instanceof关键字
    性能测试——记weblogic 连接池满无法链接故障诊断过程
    性能测试——记XX银行电票系统上线后宕机问题诊断优化
    性能测试——深圳个贷营销项目出差总结
    软件性能故障诊断分析流程培训
    OutOfMemoryError本地线程不足问题分析
    loadrunner比较有用的字符串函数
  • 原文地址:https://www.cnblogs.com/2016yjl/p/6137655.html
Copyright © 2011-2022 走看看