java拓展----字节数组流

时间:2022-09-03 08:26:07

目录

   1.简介虚拟机与系统

  2.ByteArrayInputStream

  3.ByteArrayOutputStream

一、简介虚拟机与系统

  

  我们知道java程序是可以跨平台运行的,它的实现方式则是借助JVM虚拟机,JVM毕竟只是一个虚拟机,他是不能直接操作操作系统上的文件的,

如果需要操作这些文件,j我们需要借助操作系统(OS)来操作文件。java中使用IO流的方式来操作系统中的文件。但是JVM它是可以直接控制内存的。

我们可以利用这一特性将一些重要且并不是很大的数据以而二进制的形式存放在内存中。在java就有这么一组操作字节的流---->字节数组流。

二、ByteArrayInputStream

  

  字节数组输入流,基本用法跟文件操作流差不多,具体步骤为:

  1.数据源(二进制)

  2.创建流

  3.数据读取操作

  4.释放资源

  以下是byteArrayInputStreamDemo:

package com.demo.io;

import java.io.ByteArrayInputStream;
import java.io.IOException;

public class ByteArrayStreamDemo {
    public static void byteArrayInputStreamDemo() throws IOException{
        //创建数据源
        byte [] b = "hello word".getBytes();
        //创建流
        ByteArrayInputStream bis = new ByteArrayInputStream(b);
        //创建缓冲区
        byte [] b2 = new byte[5];
        int len=-1;
        //将数据读到缓冲区中
        while((len = bis.read(b2))!=-1){
            System.out.println(new String(b2,0,len));
        }
    }
    public static void main(String[] args) throws Exception {
        byteArrayInputStreamDemo();
    }
}

ps:这个流不需要关闭,研究源代码可知,官方并没有处理这个,而是交给GC回收的,官方增加这个方法只是增加代码的整体性。

以下是官方close方法的源码:

/**
     * Closing a <tt>ByteArrayInputStream</tt> has no effect. The methods in
     * this class can be called after the stream has been closed without
     * generating an <tt>IOException</tt>.
     */
    public void close() throws IOException {
    }

三、ByteArrayOutputStream

 

  字节数组输出流,使用步骤稍有不一样。它的作用是将二进制数据写入到一个二进制数组中,使用步骤稍有不同:

  1.选择流

  2.选取数据源

  3.写入数据

  4.获取数据

  一下是byteArrayOutputStreamDemo:

package com.demo.io;

import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class ByteArrayStreamDemo {
    public static void byteArrayOutputStreamDemo() throws IOException{
        byte[] b =null;
        //选择流
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        //模拟二进制数据
        byte[] b2 = "HELLO WORD".getBytes();
        //将b2写入到内存中
        bos.write(b2,0,b2.length);
        bos.flush();
        //获取写入的数据
        b = bos.toByteArray();
        System.out.println(b.length+"==>"+new String(b,0,b.length));
    }
    public static void main(String[] args) throws Exception {
        byteArrayOutputStreamDemo();
    }
}