bytearrayoutputstream 是基于内存的字节输出流,内部用动态扩容的 byte 数组暂存数据,支持单字节、字节数组及部分写入,调用 tobytearray() 获取副本,常用于序列化、缓冲和二进制内容生成。

ByteArrayOutputStream 是 Java 中一个基于内存的字节输出流,它把写入的数据暂存在内部的 byte 数组里,不涉及磁盘或网络,适合临时拼接、缓存或转换字节内容。
创建并写入字节
直接 new 一个实例,调用 write() 方法即可往内存中写入字节:
- 写单个字节:
baos.write(65)→ 写入字节 0x41(即字符 'A') - 写字节数组:
baos.write("Hello".getBytes(StandardCharsets.UTF_8)) - 写数组的一部分:
baos.write(data, offset, length)
自动扩容机制
内部 byte 数组默认初始容量是 32 字节。当写入超出当前容量时,会自动扩容(翻倍增长),无需手动管理大小。例如写入 100 字节后,内部数组可能已扩展为 128 字节。
获取结果字节数组
调用 toByteArray() 得到当前所有已写入的字节副本(注意:返回的是新数组,修改它不影响流):
byte[] bytes = baos.toByteArray();- 如果后续还会写,可继续用
write(...);若不再写,建议及时调用 close()(虽无实际资源释放,但符合流使用习惯)
常见用途示例
常用于序列化、压缩前缓冲、生成动态二进制内容等场景:
- 把多个小字节数组合并:
baos.write(header); baos.write(body); baos.write(footer); - 配合 ObjectOutputStream 序列化对象到内存:
new ObjectOutputStream(baos) - 生成图片/ZIP 等二进制数据中间态,再转成 Base64 或写入文件
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











