package com.io;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.junit.Test;
/*
输出字节流:
--------| OutputStream:是所有输出字节流的父类;抽象类;
-----------| FileOutputStream:向文件写入数据的输出字节流;
-----------| BufferedOutputStream:缓冲输入字节流; 内部也是维护了一个8kb的字节数组;
BufferedOutputStream出现的目的是为了提高写数据的效率;
BufferedOutputStream使用步骤:
1、找到目标文件
2、建立数据输出通道
3、建立缓冲输出字节流对象
4、将数据写出
5、释放资源
BufferedOutputStream注意事项:
使用BufferedOutputStream写数据的时候,他的write()方法是先把数据写到他内部维护的字节数组中;
如果想要把数据真正写到硬盘上去,需要调用flush()方法,或者close()方法,或者当内部维护的字节数组已经
填满数据的时候也会将数据刷新到硬盘上去;
*/
public class Demo7 {
// 使用BufferedOutputStream缓冲输出字节流写出数据
@Test
public void test1() throws IOException{
// 1、找到目标文件
File file = new File("D:\\a.txt");
// 2、建立数据输出通道
FileOutputStream out = new FileOutputStream(file);
// 3、建立缓冲输出字节流对象
BufferedOutputStream buffer = new BufferedOutputStream(out);
// 4、将数据写出
String content = "Hello World";
buffer.write(content.getBytes());
// 5、释放资源
buffer.close();
}
// 使用缓冲输入输出字节流拷贝图片
@Test
public void copyImage() throws IOException{
// 1、找到目标文件
File inFile = new File("D:\\photos\\11.jpg");
File outFile = new File("D:\\11.jpg");
// 2、建立输入输出通道
FileInputStream in = new FileInputStream(inFile);
FileOutputStream out = new FileOutputStream(outFile);
// 3、建立缓冲输入输出字节流
BufferedInputStream inBuffer = new BufferedInputStream(in);
BufferedOutputStream outBuffer = new BufferedOutputStream(out);
// 4、边读边写
int content = 0;
// int len = inBuffer.read(buf); 如果read()方法中传入了缓冲数组,内容存储到缓冲数组中,返回的是读取到的字节数;
while ((content = inBuffer.read()) != -1){ // 如果read()方法没有传入缓冲数组,返回的是读取到的内容;
outBuffer.write(content);
// 此处不需要手动刷新;因为读取的数据存储满了字节缓冲数组之后,会自动刷新到硬盘上;
// outBuffer.flush();
}
// 释放资源
outBuffer.close();
inBuffer.close();
}
}