zoukankan      html  css  js  c++  java
  • 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的性能提升是很明显的。

  • 相关阅读:
    ColorMask
    InfoPanel
    什么是三消游戏
    Display file information in the document window
    Layer Comps
    Add words to your picture
    为什么质数是无穷的?
    嘉年华的来历
    MonoBehaviour.OnValidate
    Loadrunner中百分比模式和Vuser模式
  • 原文地址:https://www.cnblogs.com/gatsbydhn/p/5287115.html
Copyright © 2011-2022 走看看