java-IO-字节数组输入输出流(ByteArrayInputStream、ByteArrayOutputStream)

本文介绍了Java中的ByteArrayInputStream和ByteArrayOutputStream的使用,它们分别用于将字节数组转换为字节输入流和从字节数组输出流获取字节数组。此外,还探讨了如何利用这两个类实现文件与字节数组之间的转换,以及对象的深克隆技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 字节数组输入输出流
  1. ByteArrayInputStream:将字节数组转成字节输入流
  2. ByteArrayOutputStream:从字节数组输出流可以获取字节数组
  • 将文件转为字节数组、字节数组转为文件
// 测试文件大小:2487KB
// 文件转为字节数组
public static byte[] ioOption() throws IOException {

    // 缓冲字节输入流
    BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File("D:/demo.txt")));
    // 字节数组输出流
    ByteArrayOutputStream baos = new ByteArrayOutputStream();

    byte[] bytes = new byte[1024];
    int len;
    while((len = bis.read(bytes))!=-1){
        baos.write(bytes,0,len);
    }

    bis.close();
    baos.close();
    return baos.toByteArray();
}
输出:
耗时(毫秒):8


// 测试文件大小:2487KB
// 字节数组转为文件
public static void ioOption(byte[] bytes) throws IOException {

    // 字节数组输入流
    ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
    // 缓冲字节输出流
    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File("D:/copy.txt")));

    byte[] buffer = new byte[1024];
    int len;
    while((len = bais.read(buffer))!=-1){
        bos.write(buffer,0,len);
    }

    bais.close();
    bos.close();
}
输出:
耗时(毫秒):13
  • 将对象转为字节数组、字节数组转为对象(深克隆技术的一种实现方式)
// Student 类必须实现 Serializable 接口
// 对象转为字节数组
public static byte[] ioOption(Student student) throws IOException {

    // 字节数组输出流
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    // 对象字节输出流
    ObjectOutputStream oos = new ObjectOutputStream(baos);
    // 将对象写进 baos
    oos.writeObject(student);

    baos.close();
    oos.close();
    return baos.toByteArray();
}

// Student 类必须实现 Serializable 接口
// 字节数组转为对象
public static Student ioOption(byte[] bytes) throws IOException, ClassNotFoundException {

    // 字节数组输入流
    ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
    // 缓冲字节输出流
    ObjectInputStream ois = new ObjectInputStream(bais);

    return (Student) ois.readObject();
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值