Java学习笔记之IO(五):BufferedOutputStream缓冲输出字节流

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();
	}
	
}

你可能感兴趣的:(java学习笔记)