Java IO(五) 缓冲流

缓冲流是一种处理流,需要套在节点流上使用,能提高写入或读取的速度
1.BufferedInputStream 和BufferedOutputStrem字节缓冲流
2.BufferedReader和BufferedWriter字符缓冲流

BufferedInputStream 和BufferedOutputStre字节缓冲流
测试未加缓冲流和加缓冲流在速度上的差异,拷贝870M大小的文件,

package com.mike.io.eg;

import java.io.IOException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.File;

/**
 * @author mike
 * @date 2020-11-26
 * @desc 字节输入缓冲流,测试无缓冲流拷贝文件
 */
public class BufferedInputStreamDemo {
	public static void main(String[] args) {
		//定义输入流
		FileInputStream fis = null;
		FileOutputStream fos = null;
		File source = new File("D:\\系统镜像\\ubuntu-18.04.4-live-server-amd64.iso");
		File target = new File("F:\\ubuntu-18.04.4-live-server-amd64.iso");
		try {
			long start = System.currentTimeMillis();
			fis = new FileInputStream(source);
			fos = new FileOutputStream(target);
			byte[] buffer = new byte[1024];
			int len = 0;
			while((len = fis.read(buffer)) != -1) {
				fos.write(buffer,0,len);
			}
			long end = System.currentTimeMillis();
			System.out.println("拷贝成功,一共耗时" + (end - start) / 60 + "s" );//74s
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				fis.close();
				fos.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

	}
}


输出结果

package com.mike.io.eg;

import java.io.IOException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;

/**
 * @author mike
 * @date 2020-11-26
 * @desc 字节缓冲输出流,测试加缓冲流拷贝文件时间
 */
public class BufferedOutputStreamDemo1 {
	public static void main(String[] args) {
		File source = new File("D:\\系统镜像\\ubuntu-18.04.4-live-server-amd64.iso");
		File target = new File("F:\\ubuntu-18.04.4-live-server-amd64.iso");
		BufferedInputStream bis = null;
		BufferedOutputStream bos = null;
		try {
			long start = System.currentTimeMillis();
			bis = new BufferedInputStream(new FileInputStream(source));
			bos = new BufferedOutputStream(new FileOutputStream(target));
			int len = 0;
			byte[] buffer = new byte[1024];
			while((len = bis.read(buffer)) != -1) {
				bos.write(buffer,0,len);
			}
			long end = System.currentTimeMillis();
			System.out.println("拷贝完成,一共耗时" + (end-start)/60 + "s" );
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				bis.close();
				bos.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

	}
}

输出结果

测试结果表明使用缓冲流读写文件时间会缩短3分之一,强烈建议使用缓冲流

BufferedReader和BufferedWriter字符缓冲流
字符缓冲流独有的2个方法

  • BufferedReader:public String readLine():读一行数据。 读取到最后返回null。
  • BufferedWriter:public void newLine():换行,该方法内部调用了lineSeparator,它表示的换行符。
package com.mike.io.eg;

import java.io.IOException;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.File;

/**
 * @author mike
 * @date 2020-11-27
 * @desc 字符输入缓冲流
 */
public class BufferedReaderDemo {
	public static void main(String[] args) {
		//定义缓冲流对象
		BufferedReader br = null;
		//定义文件对象
		File file = new File("F://foo.txt");
		try {
			br = new BufferedReader(new FileReader(file));
			String data;
			while((data = br.readLine()) != null) {
				System.out.println(data);
			}
		} catch(IOException e) {
			e.printStackTrace();
		} finally {
			try {
				br.close();
			} catch (IOException e) {
				e.printStackTrace();
			}

		}
	}
}

package com.mike.io.eg;

import java.io.IOException;
import java.io.File;
import java.io.FileWriter;
import java.io.BufferedWriter;

/**
 * @author mike
 * @date 2020-11-27
 * @desc 字符输出缓冲流
 */
public class BufferedWriterDemo {
	public static void main(String[] args) {
		//定义缓冲流
		BufferedWriter bw = null;
		//定义文件对象
		File file = new File("F:\\foo.txt");
		try {
			bw = new BufferedWriter(new FileWriter(file));
			bw.write("我的名字叫mike");
			bw.newLine();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				bw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}
posted @ 2020-11-28 17:57  allgy  阅读(93)  评论(0编辑  收藏  举报