• 5.17Java字节数组流


    5.17Java字节数组流

    位置--->位于JVM当中,Java可以直接访问

    特点:

    • 由垃圾回收机制GC来释放

    • 与操作系统无关--->字节数组流不需要释放

    • 任何东西(数据、对象...)都可以转成字节数组(字节数组直接是二进制,方便进行网络的传输)

    • 字节数组不要太大

    package iostudy.ioprogramme;

    import java.io.*;
    import java.nio.charset.StandardCharsets;

    /**
    * JavaIo字节数组输入流
    * 1、创建源--->创建源文件
    * 2、选择流--->选择字节数组输入流
    * 3、进行文件操作--->文件操作
    * 4、关闭资源
    * @since JDK 1.8
    * @date 2021/5/18
    * @author Lucifer
    */
    public class IoByteInputStream {
       public static void main(String[] args) {

      }

       public static void byteCopy(){
           //创建源--->创建源从创建文件变成创建字节数组
           byte[] src = "talk is cheap show me the code!".getBytes(StandardCharsets.UTF_8);
           //选择流--->字节输入选择流
           InputStream is = null;
           //操作--->选择流变成字节数组
           try {
               is = new ByteArrayInputStream(src);
               //缓冲容器依然是字节数组
               byte[] flush = new byte[5]; //每次的字节数组空间大小为5
               int temp = -1; //接收长度
               while ((temp=is.read(flush))!=-1){
                   //将字节数组转成字符串--->解码
                   String str = new String(flush, 0, temp);
                   System.out.println(str);
              }
          }catch (IOException e) {
               System.out.println(e.getMessage());
               e.printStackTrace();
          }
      }
       /*
       因为ByteArrayInputStream在我们虚拟机内存中开辟的空间,所以不需要和操作系统交互
       所以不需要写try关闭资源的代码
        */
    }

    字节数组流和其他流不一样的地方:

    • 创建流是创建字节数组流--->字节数组不要太大

    • 释放资源可以不用处理--->因为不涉及到与计算机硬盘交互

    字节数组输出流:

    package iostudy.ioprogramme;

    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.nio.charset.StandardCharsets;

    /**
    * 测试字节数组输出流--->ByteArrayOutputStream(构造器不需要指定目的地--->文件可以一直往里面追加内容,所以不需要写路径)
    * 该类实现了将数据写入字节数组的输出流。 当数据写入缓冲区时,缓冲区会自动增长。 数据可以使用toByteArray()和toString()
    * 特殊方法:toByteArray()--->创建一个新分配的字节数组。
    * 1、创建源
    * 2、选择流--->字节数组输出流
    * 3、操作(写出内容)
    * 4、释放资源--->关闭源文件
    * @since JDK 1.8
    * @date 2021/5/19
    * @author Lucifer
    */
    public class IoByteOutputStream {
       public static void main(String[] args) throws IOException {
           //创建源--->字节数组
           byte[] dest = null;
           //选择流--->因为要使用新增方法(子类单独有的方法),所以不要发生多态(发生多态使用的都是重写的方法或延续的方法)
           ByteArrayOutputStream baos = null;
           /*尝试对文件进行操作*/
           try {
               baos = new ByteArrayOutputStream();
               //写出的字符串内容
               String str = "show me the code!"; //将内容写入字节数组中
               /*放入字节缓冲区*/
               byte[] datas = str.getBytes(StandardCharsets.UTF_8); //字符串--->字节数组--->涉及到编码的问题
               //写出内容
               baos.write(datas, 0, datas.length);
               //强制刷新
               baos.flush();
               //获取数据长度
               dest = baos.toByteArray(); //将字节数组放入目的数组当中--->缓冲区会自动变化
               System.out.println(dest.length + "--->" + new String(dest, 0, baos.size())); //dest.length和dest.size都是dun
          }catch (FileNotFoundException e){
               System.out.println(e.getMessage());
               e.printStackTrace();
          } catch (IOException e) {
               e.printStackTrace();
          }finally {
               /*释放资源--->这里关不关闭资源不要紧*/
               if (null != baos) {
                   baos.close();
              }
          }
      }
    }

    特点:

    • 创建源--->内部维护

    • 选择流--->流选择的时候不关联源

    • 操作

    • 关闭资源--->可以不用

    • 获取数据,通过toByteArray方法,因为内部将数据保留到内存中了

    手写文件--->字节数组--->文件的流操作

    文件输入流、字节数组输入流、字节数组输出流、文件输出流

     

    It's a lonely road!!!
  • 相关阅读:
    作为技术管理者,我如何保持技术判断力
    管理沟通
    管理规划
    nginx 在浏览器端保持cookie 一致
    openssl 升级操作 -2
    iptables 实际操作 之 规则查询 2
    iptables 概念 1
    openssl 升级 操作 -1
    使用秘钥对登录服务器
    SSH配置免秘钥登录
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/14787039.html
Copyright © 2020-2023  润新知