package com.soar.otherio;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class Demo2_ByteArrayOutputStream {
/*
****1.什么是内存输出流
* 该输出流可以向内存中写数据, 把内存当作一个缓冲区, 写出之后可以一次性获取出所有数据
****2.使用方式
* 创建对象: new ByteArrayOutputStream()
* 写出数据: write(int), write(byte[])
* 获取数据: toByteArray()
*
* ByteArrayOutputStream()
* 内存输出流
*
* FileInputStream读取中文的时候出现了乱码
* 解决方案:
* ① 字符流读取
* ② ByteOutPutStream
*/
public static void main(String[] args) throws IOException {
//demo1();
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()); //将缓冲区的内容转换为了字符串,在输出语句中可以省略调用toStrin()方法
fis.close();
}
private static void demo1() throws FileNotFoundException, IOException {
FileInputStream fis = new FileInputStream("e.txt");
byte[] arr = new byte[3];
int len;
while((len = fis.read(arr)) != -1){
System.out.println(new String(arr, 0, len));
}
}
}
面试题
package com.sora.test;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class Test8 {
/*
* 定义一个文件输入流,调用read(byte[] b)方法,
* 将a.txt文件中的内容打印出来(byte数组大小限制为5)
*
* 分析:
* ① read(byte[] b)是字节输入流的方法,创建FileInputStream,关联a.txt
* ② 创建内存输出流,将读到的数据写到内存输出流中
* ③ 创建字节数组,长度为5
* ④ 将内存输出流的数据,全部转换为字符串打印
* ⑤ 关闭输入流
*/
public static void main(String[] args) throws IOException {
//① read(byte[] b)是字节输入流的方法,创建FileInputStream,关联a.txt
FileInputStream fis = new FileInputStream("a.txt");
//② 创建内存输出流,将读到的数据写到内存输出流中
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//③ 创建字节数组,长度为5
byte[] arr = new byte[5];
int len;
while((len = fis.read(arr)) != -1){
baos.write(arr, 0, len);
}
//④ 将内存输出流的数据,全部转换为字符串打印
System.out.println(baos); //即使没有调用,底层也会默认帮我们调用toString()方法
//⑤ 关闭输入流
fis.close();
}
}