• javase-NIO


    JDK1.4引入了java.nio.*包,用以提高IO操作的性能。
    下面做个试验测试拷贝一个59M的文件,使用不缓冲的FileInoutStream,带缓冲的BufferedFileInputStream,nio包中的FileChannel和ByteBuffer。

    代码:

    public class FileCopy {
    	
    	public static final int  BSIZE = 1024;
    	
    	public static void main(String[] args) {
    		
    		String fileFrom = "D:" + File.separator + "操作系统" +File.separator+ "week9_文件系统" +File.separator+ "video.mp4";
    		String fileTo = "D:" + File.separator + "操作系统" +File.separator+ "week9_文件系统" +File.separator+ "videoCopy.mp4";
    		long startMill;
    		long endMill;
    		startMill = System.currentTimeMillis();
    		copyWithNio(fileFrom, fileTo);
    		endMill = System.currentTimeMillis();
    		System.out.println("use " + (endMill - startMill) / 1000 + "s");
    	}
    	
    	public static void copyWithNoBuffer(String from, String to) {
    		try {
    			FileInputStream fr = new FileInputStream(from);
    			FileOutputStream fw = new FileOutputStream(to);
    			int i;
    			while ((i = fr.read()) != -1) {
    				fw.write(i);
    			}
    			fr.close();
    			fw.close();
    			
    			System.out.println("end of copy");
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    	
    	public static void copyWithBuffer(String from, String to) {
    		try {
    			BufferedInputStream bis = new BufferedInputStream(new FileInputStream(from));
    			BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(to));
    			int i;
    			while ((i = bis.read()) != -1) {
    				bos.write(i);
    			}
    			
    			bis.close();
    			bos.close();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    	
    	public static void copyWithNio(String from, String to) {
    		try {
    			FileChannel in = new FileInputStream(from).getChannel();
    			FileChannel out = new FileOutputStream(to).getChannel();
    			ByteBuffer bb = ByteBuffer.allocate(BSIZE);
    			while (in.read(bb) != -1) {
    				bb.flip();
    				out.write(bb);
    				bb.clear();
    			}
    			
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		
    	}
    }
    

    结论:

    1. FileInoutStream:24分钟
    2. BufferedFileInputStream: 5秒
    3. FileChannel和ByteBuffer: 1秒

    从结论看,Nio的性能提升是很明显的。

  • 相关阅读:
    Python练习题
    python自动化学习笔记(六)
    Python自动化学习笔记( 五)
    自动化学习笔记之接口测试(一)
    python自动化学习笔记(四)
    vim编辑器命令
    linux之shell通配符
    Python自动化学习笔记(二)
    python自动化学习笔记(三)
    python学习笔记之常用操作符
  • 原文地址:https://www.cnblogs.com/gatsbydhn/p/5287115.html
Copyright © 2020-2023  润新知