字节数组流ByteArrayInputStream和ByteArrayOutputStream

本文介绍如何使用Java中的ByteArrayInputStream和ByteArrayOutputStream类来操作字节数组,无需关闭流。通过实例展示了如何从文件中读取数据到字节数组,并将字节数组的内容写入另一个文件。
package demo.io;

import java.io.*;

/**
 * 用流的思想操作数组,ByteArrayInputStream和ByteArrayOutputStream共同操作一个数组
 * 无需关闭流
 */
class 字节数组流ByteArrayInputStream和ByteArrayOutputStream {
    public static void main(String[] args) throws IOException {
        output();//写入
//        input();//读取
    }

    //读取
    private static void input() {
        byte[] buf = {97, 98, 99, 100};
        ByteArrayInputStream bis = new ByteArrayInputStream(buf);
        int ch = 0;
        while ((ch = bis.read()) != -1) {
            System.out.println((char) ch);
        }
        System.out.println(bis.toString());
    }

    //写入
    private static void output() throws IOException {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();//创建缓冲区

        FileInputStream fis = new FileInputStream("异常日志.txt");
        PrintStream ps = new PrintStream("后期设备的配置文件.properties");
        int b = 0;
        while ((b = fis.read()) != -1) {
            bos.write(b);
        }
        fis.close();

        ps.write(bos.toByteArray());//将缓冲区数据一次性写入目的文件

        ps.close();
        bos.close();
    }
}
/**
 * writeTo(OutputStream out)
 * 将此 byte 数组输出流的全部内容写入到指定的输出流参数中,
 * 这与使用 out.write(buf, 0, count) 调用该输出流的 write 方法效果一样。
 */
### 概念 Java 字节数组流是用于处理字节数组的输入输出流,包括`ByteArrayInputStream``ByteArrayOutputStream`。`ByteArrayInputStream`允许将字节数组作为输入源,从字节数组中读取数据;`ByteArrayOutputStream`则可以将数据写入到一个内部字节数组中,方便后续处理。 ### 使用方法 #### `ByteArrayInputStream` `ByteArrayInputStream`的构造方法为`ByteArrayInputStream(byte[] buf, int offset, int length)`,其中`buf`指定字节数组类型的数据源,`offset`指定在数组中开始读取数据的起始下标位置,`length`指定读取的元素个数[^3]。 以下是`ByteArrayInputStream`的使用示例: ```java import java.io.ByteArrayInputStream; import java.io.IOException; public class ByteArrayInputStreamExample { public static void main(String[] args) { byte[] byteArray = {1, 2, 3, 4, 5}; try (ByteArrayInputStream bais = new ByteArrayInputStream(byteArray)) { int data; while ((data = bais.read()) != -1) { System.out.print(data + " "); } } catch (IOException e) { e.printStackTrace(); } } } ``` #### `ByteArrayOutputStream` `ByteArrayOutputStream`可以使用`toByteArray()`方法返回流中的字节数组。 以下是`ByteArrayOutputStream`的使用示例: ```java import java.io.ByteArrayOutputStream; import java.io.IOException; public class ByteArrayOutputStreamExample { public static void main(String[] args) { try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) { String str = "Hello, ByteArrayOutputStream!"; byte[] bytes = str.getBytes(); baos.write(bytes); byte[] result = baos.toByteArray(); for (byte b : result) { System.out.print(b + " "); } } catch (IOException e) { e.printStackTrace(); } } } ``` ### 应用场景 - **数据缓存**:在内存中临时存储数据,避免频繁的磁盘或网络 I/O 操作。 - **数据转换**:将不同格式的数据转换为字节数组进行处理,例如将对象序列化为字节数组,或者将字节数组反序列化为对象。 - **测试**:在单元测试中模拟输入输出流,方便对代码进行测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值