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