详解Java中ByteArray字节数组的输入输出流的用法

详解Java中ByteArray字节数组的输入输出流的用法

什么是ByteArray字节数组?

在Java中,字节数组是指由若干个字节所组成的数组。字节一般是指8位二进制数,也就是一个范围在0-255的整数,因此Java中一个字节数组就是由一系列整数所组成的数组。

什么是Java中的输入输出流?

Java中的输入输出流是用来实现数据的流动,将数据从输入端流入程序,或者从程序输出到输出端。在Java中,分为字节流和字符流两种类型。其中字节流主要操作字节,字符流主要操作字符。

ByteArray输入输出流的用途

ByteArray输入输出流主要用于在内存中对字节数组进行操作,将字节数组中的数据读出或者写入。它并不是物理上的输入输出流,而是对字节数组进行操作的流。通常情况下,我们可以将ByteArray输入输出流和File输入输出流、Socket输入输出流等结合使用,便于快速读写数据。

ByteArray输入输出流的常用方法

ByteArrayInputStream的常用方法

  • public int read(): 从输入流中读取下一个数据字节。
  • public int read(byte b[], int off, int len): 从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中。
  • public int available(): 返回可从此输入流中读取的字节数。
  • public void close(): 关闭此输入流并释放与该流关联的所有系统资源。
  • public long skip(long n): 从输入流中跳过并丢弃n个字节数据。

ByteArrayOutputStream的常用方法

  • public void write(int b): 将指定的字节写入此输出流。
  • public void write(byte b[], int off, int len): 将指定数组中从偏移量 off 开始的 len 个字节写入此输出流。
  • public byte[] toByteArray(): 创建一个新分配的字节数组,其大小是此输出流的当前大小,并且缓冲区的有效内容已复制到该数组中。
  • public int size(): 返回此输出流的当前大小。
  • public void reset(): 将此输出流重置为空状态。
  • public void close(): 关闭此输出流并释放与此流有关的所有系统资源。

ByteArray字节数组的输入输出流示例

接下来,我们使用ByteArrayInputStream、ByteArrayOutputStream与FileOutputStream结合的方式,演示一下如何从字节数组中读取数据并将数据写出到磁盘上。

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class ByteArrayIOTest {

    public static void main(String[] args) {
        // 将字符串转化为字节数组
        byte[] data = "Hello World!".getBytes();
        // 创建ByteArrayInputStream对象
        ByteArrayInputStream bais = new ByteArrayInputStream(data);
        // 创建ByteArrayOutputStream对象
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        // 定义缓冲区
        byte[] buffer = new byte[1024];
        int len;
        try {
            // 读取ByteArrayInputStream,将数据写入ByteArrayOutputStream
            while ((len = bais.read(buffer)) > -1) {
                baos.write(buffer, 0, len);
            }
            // 将ByteArrayOutputStream中的数据写入FileOutputStream
            FileOutputStream fos = new FileOutputStream("hello.txt");
            baos.writeTo(fos);
            fos.close(); 
            // 打印结果
            System.out.println(baos.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

运行后,会同时在控制台输出"Hello World!"以及在磁盘上生成一个名为hello.txt的文件。

再看一段将整型数组写入ByteArrayOutputStream,然后将该字节数组读入到ByteArrayInputStream中的Java代码示例。

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class ByteArrayTest {

    public static void main(String[] args) throws IOException {
        // 准备一个整型数组
        int[] array = {1,2,3};
        // 创建ByteArrayOutputStream对象
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        // 将数组写入ByteArrayOutputStream
        for (int i = 0; i < array.length; i++) {
            baos.write(array[i]);
        }
        // 将ByteArrayOutputStream转换成ByteArrayInputStream
        InputStream in = new ByteArrayInputStream(baos.toByteArray());
        // 读取ByteArrayInputStream中的数据
        int i = -1;
        while((i = in.read())!= -1){
            System.out.print(i+",");
        }
        // 关闭流
        in.close();
        baos.close();
    }
}

程序运行的输出结果为"1,2,3,",证明了在将整型数组写入ByteArrayOutputStream后,从ByteArrayInputStream读取数据是可行的。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Java中ByteArray字节数组的输入输出流的用法 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Java手写持久层框架的详细代码

    为了写好一个Java手写持久层框架,我们需要掌握以下的知识点: 数据库连接池的使用 反射机制 注解技术 面向接口开发 在手写持久层框架中,我们需要为每一个实体类编写相应的映射文件,这个映射文件一般是编写在XML配置文件中。在配置文件中,我们需要指定实体类对应的数据库表名、各个属性与数据库表中字段的对应关系等信息。 以下是实现手写持久层框架的常用步骤: 编写核…

    Java 2023年5月20日
    00
  • Java中Controller引起的Ambiguous mapping问题及解决

    首先我们需要明确什么是Controller及Ambiguous mapping问题。 什么是Controller 在Java Web应用中,Controller是一种将请求路由到相应处理程序的设计模式。在Spring MVC框架中,Controller是处理请求的核心组件,它负责接收请求、调用处理程序并返回响应。 什么是Ambiguous mapping问题…

    Java 2023年5月25日
    00
  • Jmeter BeanShell 内置变量vars、props、prev的使用详解

    下面是“Jmeter BeanShell 内置变量vars、props、prev的使用详解”的完整攻略。 1. 什么是BeanShell内置变量 在Jmeter中,BeanShell是一种脚本语言。当我们需要在Jmeter中编写脚本时,可以使用BeanShell语言。Jmeter中已经内置了许多BeanShell变量,这些变量中包含了大量的信息,可以帮助我们…

    Java 2023年6月15日
    00
  • 教你如何架设个人服务器——全教程

    教你如何架设个人服务器——全教程 介绍 在本文中,我们将教你如何架设个人服务器。为什么要架设个人服务器呢?因为架设个人服务器可以让你自由地管理自己的网络服务,比如搭建自己的网站、文件云存储等等。不仅如此,架设个人服务器还可以帮助你锻炼技术能力,提高自己的技术水平。 步骤 步骤一:选购服务器 首先你需要选购一台服务器,可以考虑云服务器、独立服务器等不同的类型。…

    Java 2023年6月15日
    00
  • java运行时数据区域和类结构详解

    关于“java运行时数据区域和类结构详解”的攻略,下面是详细讲解: Java运行时数据区域 Java虚拟机在执行Java程序时,会将它所管理的内存划分成不同的数据区域,分别用于存储不同类型的数据。主要分为以下几个部分: 程序计数器 程序计数器是一块较小的内存空间,它的作用是记录当前线程执行的字节码的位置。程序计数器一般不会出现OutOfMemoryError…

    Java 2023年5月26日
    00
  • JDBC使用Statement修改数据库

    JDBC是Java Database Connectivity的简称,是Java专门用于访问数据库的标准API。它提供了一种标准的访问关系型数据库的方法,可以通过它访问MySQL、Oracle、SQL Server等数据库。Statement是JDBC中用于执行SQL语句的接口,包含了执行SQL查询、更新等操作的方法。 下面是使用Statement修改数据库…

    Java 2023年5月20日
    00
  • Java 二维码,QR码,J4L-QRCode 的资料整理

    关于Java二维码的资料整理,我可以提供以下攻略: Java二维码资料整理 什么是二维码/Qr码? 二维码(QR码)是一种由日本发明的二维条码,可以用来快捷、高效地传输信息。与传统的条形码不同,二维码可以储存更多的信息,并且可以包含文字、链接、图像等多种格式。在生活中,二维码已经被广泛使用,例如快递单上的小方块、支付宝扫码支付等。 Java二维码生成库J4L…

    Java 2023年5月20日
    00
  • 微信小程序 获取二维码实例详解

    微信小程序获取二维码实例详解 1. 背景 在微信小程序中,我们可以通过获取小程序的二维码来实现页面分享、推广等功能。本文将详细讲解如何在小程序中获取二维码。 2. 实现步骤 2.1 准备工作 在开发小程序前,需要先申请小程序的 AppID。授权方式可以是开发者账号授权或是公众平台授权。 2.2 获取二维码 在小程序接口中,提供了一个 wx.createQRC…

    Java 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部