内存输出流ByteArrayOutputStream
程序员文章站
2022-06-18 22:38:44
...
一、简介
1.概述
此类实现了一个输出流,其中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray()
和 toString()
获取数据。
关闭 ByteArrayOutputStream 无效。此类中的方法在关闭此流后仍可被调用,而不会产生任何 IOException。
2.构造方法
ByteArrayOutputStream()
创建一个新的 byte 数组输出流。
3.常用方法
void
write(int b)
将指定的字节写入此 byte 数组输出流。
byte[]
toByteArray()
创建一个新分配的 byte 数组。
String
toString()
使用平台默认的字符集,通过解码字节将缓冲区内容转换为字符串。
String
toString(String charsetName)
使用指定的charsetName
,通过解码字节将缓冲区内容转换为字符串。
二、使用
1.使用场景
FileInputStream读取中文的时候出现了乱码
解决方案:
- 字符流读取
- ByteArrayOutputStream
2.使用方式
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("e.txt");
ByteArrayOutputStream baos = new ByteArrayOutputStream(); //在内存中创建了可以增长的内存数组
int b;
while((b = fis.read()) != -1) {
baos.write(b); //将读取到的数据逐个写到内存中
}
//byte[] arr = baos.toByteArray(); //将缓冲区的数据全部获取出来,并赋值给arr数组
//System.out.println(new String(arr));
System.out.println(baos.toString());
//将缓冲区的内容转换为字符串,在输出语句中可以省略调用toString方法,底层会默认帮我们调用toString()方法
fis.close();
}