Java基础知识之ByteArrayOutputStream流的使用
ByteArrayOutputStream简介
Java I/O系统提供了许多不同类型的流,其中 ByteArrayOutputStream
是一个内存流,它将数据写入到内存缓冲区中而不是写入到硬盘中。它实际上是一个基于字节数组的输出/输入流,它可以动态扩展。
使用 ByteArrayOutputStream
流可以将数据写入内存缓冲区并进行读取,是一个非常有用的类。
ByteArrayOutputStream的方法
ByteArrayOutputStream
流有以下操作:
write(int b)
:将指定的字节写入此目标流。write(byte[] b, int off, int len)
:将len
字节从指定的字节数组写入此目标流。从偏移量off
开始写入。toByteArray()
:创建一个新分配的字节数组。其大小是此输出流的当前大小,并且缓冲区的有效内容已经复制到该数组中。toString()
:将缓冲区内容转换为字符串。reset()
:重置此输出流,以便将其底层字节数组中的计数清除。
ByteArrayOutputStream的使用示例
示例一
下面的示例演示了如何使用 ByteArrayOutputStream
流将字符串转换为字节数组,然后再将它们打印出来:
import java.io.ByteArrayOutputStream;
import java.io.IOException;
public class Example1 {
public static void main(String[] args) throws IOException {
String str = "Hello, World!";
byte[] data = str.getBytes();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
outputStream.write(data);
byte[] result = outputStream.toByteArray();
for (byte b : result) {
System.out.print((char) b);
}
outputStream.close();
}
}
输出结果为:
Hello, World!
示例二
下面的示例演示了如何使用 ByteArrayOutputStream
流进行图片的写入,然后读取:
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
public class Example2 {
public static void main(String[] args) throws IOException {
URL url = new URL("https://i.imgur.com/uBn1RIi.jpg");
InputStream inputStream = url.openStream();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int n = 0;
while (-1 != (n = inputStream.read(buffer))) {
outputStream.write(buffer, 0, n);
}
byte[] result = outputStream.toByteArray();
BufferedImage image = ImageIO.read(new ByteArrayInputStream(result));
ImageIO.write(image, "jpg", new File("download.jpg"));
outputStream.close();
inputStream.close();
}
}
这段程序从指定的URL中读取图片,并将其写入到 ByteArrayOutputStream
流中,然后将其转换为 BufferedImage,并将其保存到磁盘上。
总结
ByteArrayOutputStream
是 Java I/O库中一个非常有用的内存流类。它可以实现字节数组和字符串的转换,并且可以对内存缓冲区中的字节进行操作。在许多场景下,使用 ByteArrayOutputStream
流代替文件流会更加方便和高效。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java基础知识之ByteArrayOutputStream流的使用 - Python技术站