zoukankan      html  css  js  c++  java
  • 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();
    	}
    

      

  • 相关阅读:
    Linux 技巧:让进程在后台可靠运行的几种方法
    What is /dev/null 2>&1?
    In the shell, what does “ 2>&1 ” mean?
    Linux命令之umask
    /dev/null简介
    What is special about /dev/tty?
    sed用法
    cobbler 更换dns和dhcp服务器为dnsmasq
    Linux下如何退出vim的一些常用命令总结
    nginx部署vue项目
  • 原文地址:https://www.cnblogs.com/-gongxue/p/14455035.html
Copyright © 2011-2022 走看看