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的性能提升是很明显的。

posted @ 2016-03-17 13:50  gatsbydhn  阅读(179)  评论(0)    收藏  举报