0227 缓冲流

缓冲流,功能流,主要还是依赖基础流去工作

1、字节输入输出缓冲流

之前我们所学的文件复制,很明显,数组复制比单个字节复制要快,那么加上缓冲流我们再比较一下数组复制和单个字节复制的速度

缓冲流 单个字节复制

	public static void main(String[] args) throws IOException {
		//用缓冲流复制文件
		//明确文件位置读取 字节输入流
		FileInputStream fis=new FileInputStream("F:\io1127\jdk.rar");
		//字节缓冲输入流
		BufferedInputStream bis=new BufferedInputStream(fis);
		//明确复制到的文件位置 字节输出流
		FileOutputStream fos=new FileOutputStream("F:\io1127\a\jdk.rar");
		//字节缓冲输出流
		BufferedOutputStream bos=new BufferedOutputStream(fos);
		//开始复制
		int len=0;
		long time=System.currentTimeMillis();
		while((len=bis.read())!=-1){
			bos.write(len);
		}
		long time2=System.currentTimeMillis();
		System.out.println((time2-time)/1000);
		bis.close();
		bos.close();
	}

  

缓冲流 数组复制

	public static void main(String[] args) throws IOException {
		FileInputStream fis=new FileInputStream("F:\io1127\jdk.rar");
		BufferedInputStream bis=new BufferedInputStream(fis);
		FileOutputStream fos=new FileOutputStream("F:\io1127\a\b\jdk.rar");
		BufferedOutputStream bos=new BufferedOutputStream(fos);
		byte[] bytes=new byte[1024];
		long time=System.currentTimeMillis();
		int len=0;
		while((len=bis.read(bytes))!=-1){
			bos.write(bytes,0,len);
		}
		long time2=System.currentTimeMillis();
		System.out.println((time2-time)/1000);
		bis.close();
		bos.close();
	}

  由上述两段代码,从时间上比较 缓冲流加数组复制比缓冲流加单个字节复制的速度要快,并且加缓冲流比不加缓冲流的要快

3、字符输入输出缓冲流

在字符输入缓冲流中提供了两个新的常用类方法

newline()在当前系统中写入一个换行符

readLine() 在读取文件时 一行一行读取

那我们来读取一下

	public static void main(String[] args) throws IOException {
		//一行一行读取
		FileInputStream fis=new FileInputStream("F:\io1127\hello.txt");
		//转换流
		InputStreamReader iso=new InputStreamReader(fis,"utf-8");
		//缓冲流
		BufferedReader br=new BufferedReader(iso);
		//读取一个文本行
		String line=null;
		while((line=br.readLine())!=null){
			System.out.println(line);
		}
		br.close();

 因为工作空间和文件的码表不一样 所以我们需要加入转换流去指定码表进行读取

利用字符输入输出缓冲流对文件进行复制,同时也需要加入转换流去指定码表

	public static void main(String[] args) throws IOException {
		//明确数据源
		FileInputStream fis=new FileInputStream("F:\io1127\hello.txt");
		//添加转换流
		InputStreamReader isr=new InputStreamReader(fis,"utf-8");
		//添加缓冲流
		BufferedReader br=new BufferedReader(isr);
		//明确目的地
		FileOutputStream fos=new FileOutputStream("F:\io1127\a\hello.txt");
		//添加转换流
		OutputStreamWriter osw=new OutputStreamWriter(fos,"utf-8");
		//添加缓冲流
		BufferedWriter bw=new BufferedWriter(osw);
		//开始复制
		String line=null;
		while((line=br.readLine())!=null){
			bw.write(line);
			bw.newLine();
			bw.flush();
		}
		br.close();
		bw.close();
	}

  

原文地址:https://www.cnblogs.com/-gongxue/p/14455035.html