黑马程序员---基本字节流和高效字节流的效率比较

------- android培训java培训期待与您交流! ----------

1:字节流
(1)继承体系
InputStream FileInputStream
OutputStream    FileOutputStream
2:高效流
(1)字符高效流
BufferedReader
BufferedWriter
(2)字节高效流
BufferedInputStream
BufferedOutputStream
(3)字符高效流的特殊功能
BufferedReader String readLine()
BufferedWriter  void newLine()

3:基本字节流和高效字节流的比较:


package com.itheima;

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

public class Test11 {
	public static void main(String[] args) throws IOException {
		long start = System.currentTimeMillis();
		method1("C:\\雪.mkv", "test.mkv");
		long end = System.currentTimeMillis();
		System.out.println("基本字节流一次读写一个字节共耗时:" + (end - start) + "毫秒");
		
		start = System.currentTimeMillis();
		method2("C:\\雪.mkv", "test.mkv");
		end = System.currentTimeMillis();
		System.out.println("基本字节流一次读写一个字节数组共耗时:" + (end - start) + "毫秒");
		
		start = System.currentTimeMillis();
		method3("C:\\雪.mkv", "test.mkv");
		end = System.currentTimeMillis();
		System.out.println("高效字节流一次读写一个字节共耗时:" + (end - start) + "毫秒");
		
		start = System.currentTimeMillis();
		method4("C:\\雪.mkv", "test.mkv");
		end = System.currentTimeMillis();
		System.out.println("高效字节流一次读写一个字节数组共耗时:" + (end - start) + "毫秒");
	}

	// 高效字节流一次读写一个字节数组
	private static void method4(String srcString, String destString)
			throws IOException {
		BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
				srcString));
		BufferedOutputStream bos = new BufferedOutputStream(
				new FileOutputStream(destString));

		byte[] bys = new byte[1024];
		int len = 0;
		while ((len = bis.read(bys)) != -1) {
			bos.write(bys, 0, len);
		}

		bos.close();
		bis.close();
	}

	// 高效字节流一次读写一个字节
	private static void method3(String srcString, String destString)
			throws IOException {
		BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
				srcString));
		BufferedOutputStream bos = new BufferedOutputStream(
				new FileOutputStream(destString));

		int by = 0;
		while ((by = bis.read()) != -1) {
			bos.write(by);
		}

		bos.close();
		bis.close();
	}

	// 基本字节流一次读写一个字节数组
	private static void method2(String srcString, String destString)
			throws IOException {
		FileInputStream fis = new FileInputStream(srcString);
		FileOutputStream fos = new FileOutputStream(destString);

		byte[] bys = new byte[1024];
		int len = 0;
		while ((len = fis.read(bys)) != -1) {
			fos.write(bys, 0, len);
		}

		fos.close();
		fis.close();
	}

	// 基本字节流一次读写一个字节
	private static void method1(String srcString, String destString)
			throws IOException {
		FileInputStream fis = new FileInputStream(srcString);
		FileOutputStream fos = new FileOutputStream(destString);

		int by = 0;
		while ((by = fis.read()) != -1) {
			fos.write(by);
		}

		fos.close();
		fis.close();
	}

}

运行后的结果:

基本字节流一次读写一个字节共耗时:95580毫秒
基本字节流一次读写一个字节数组共耗时:153毫秒
高效字节流一次读写一个字节共耗时:375毫秒
高效字节流一次读写一个字节数组共耗时:127毫秒

4:缓冲的字符流(BufferedReader/BufferedWriter)

1、采用缓冲处理是为了提高效率,如果没有缓存,例如FileReader对象,每次调用read()方法进行读操作时,都会直接去文件中读取字节,转换成字符并返回,这样频繁的读   取文件效率很低。

2、缓冲的字符流的出现提高了对流的操作效率,原理就是将数组进行封装。

3、在使用缓冲的字符流对象时,缓冲的存在是为了增强流的功能,因此在建立缓冲的字符流对象时,要先有流对象的存在。


BufferedReader的特有方法:public String readLine();//一次读一行,到行标记时,将行标记之前的字符数据作为字符串返回。当读到末尾时,返回null。

BufferedWriter的特有方法:publicvoid newLine();//写出平台相关的行分隔符来标记一行的终止。Windows平台下为’\n’。

public class CopyFileDemo {
	public static void main(String[] args) throws IOException {
		// 封装数据源
		BufferedReader br = new BufferedReader(new FileReader(
				"BufferedReaderDemo.java"));
		// 封装目的地
		BufferedWriter bw = new BufferedWriter(new FileWriter("Copy.java"));
		// 读写
		String line = null;
		while ((line = br.readLine()) != null) {
			bw.write(line);
			bw.newLine();
			bw.flush();
		}

		// 释放资源
		bw.close();
		br.close();
	}
}


 
  


你可能感兴趣的:(黑马程序员---基本字节流和高效字节流的效率比较)