2007-06-27

测试NIO性能

关键字: NIO 读写 性能

时间(ms)
文件大小(byte)
Buffer(byte)
434
603900
10000
0
0
1000
0
46
100
0
188
50
0
281
5
0
2406
1
47
12000

java 代码
 
  1. package com;   
  2.   
  3. import java.io.File;   
  4. import java.io.FileInputStream;   
  5. import java.io.FileOutputStream;   
  6. import java.io.IOException;   
  7. import java.nio.ByteBuffer;   
  8. import java.nio.channels.FileChannel;   
  9.   
  10. import junit.framework.TestCase;   
  11.   
  12. /**  
  13.  * NIO read write test  
  14.  *   
  15.  * @author wutao  
  16.  *   
  17.  */  
  18. public class NioDemo extends TestCase {   
  19.   
  20.     public void testRead() throws IOException {   
  21.   
  22.         int[] sizes = { 1000010001005051 };   
  23.   
  24.         // Arrays.sort(sizes);   
  25.   
  26.         System.out.println(new File("text.txt").length());   
  27.   
  28.         for (int i = 0; i < sizes.length; i++) {   
  29.   
  30.             int size = sizes[i];   
  31.   
  32.             FileInputStream fins = new FileInputStream("text.txt");   
  33.   
  34.             FileChannel fc = fins.getChannel();   
  35.   
  36.             if (!new File("text2.txt").exists()) {   
  37.                 new File("text2.txt").createNewFile();   
  38.             }   
  39.             ByteBuffer buffer = ByteBuffer.allocate(size);   
  40.   
  41.             FileOutputStream fouts = new FileOutputStream("text2.txt");   
  42.             FileChannel fc2 = fouts.getChannel();   
  43.   
  44.             long start = System.currentTimeMillis();   
  45.   
  46.             while (true) {   
  47.                 buffer.clear();   
  48.                 int r = fc.read(buffer);   
  49.                 if (r == -1) {   
  50.                     break;   
  51.                 }   
  52.                 buffer.flip();   
  53.                 fc2.write(buffer);   
  54.             }   
  55.   
  56.             long end = System.currentTimeMillis();   
  57.   
  58.             System.out.println("---------" + size + "---------");   
  59.             System.out.println(end - start);   
  60.             fc.close();   
  61.             fc2.close();   
  62.             fins.close();   
  63.             fouts.close();   
  64.         }   
  65.     }   
  66. }   

 

Book Cover

Java™ I/O, 2nd Edition
By Elliotte Rusty Harold
...............................................
Publisher: O'Reilly
Pub Date: May 2006
Print ISBN-10: 0-596-52750-0
Print ISBN-13: 978-0-59-652750-1
Pages: 726

java 代码
 
  1. import java.io.*;   
  2. import java.nio.*;   
  3. import java.nio.channels.*;   
  4. public class NIOCopier {   
  5.   public static void main(String[] args) throws IOException {   
  6.     FileInputStream inFile = new FileInputStream(args[0]);   
  7.     FileOutputStream outFile = new FileOutputStream(args[1]);   
  8.     FileChannel inChannel = inFile.getChannel( );   
  9.     FileChannel outChannel = outFile.getChannel( );   
  10.     for (ByteBuffer buffer = ByteBuffer.allocate(1024*1024);   
  11.     inChannel.read(buffer) != -1;   
  12.     buffer.clear( )) {   
  13.       buffer.flip( );   
  14.       while (buffer.hasRemaining( )) outChannel.write(buffer);   
  15.     }   
  16.     inChannel.close( );   
  17.     outChannel.close( );   
  18.   }   
  19. }   
  20.   

 

In a very unscientific test, copying one large (4.3-GB) file on one platform (a dual 2.5-GHz PowerMac G5 running Mac OS X 10.4.1) using traditional I/O with buffered streams and an 8192-byte buffer took 305 seconds. Expanding and reducing the buffer size didn't shift the overall numbers more than 5% and if anything tended to increase the time to copy. (Using a one-megabyte buffer like Example 14-1's actually increased the time to over 23 minutes.) Using new I/O as implemented in Example 14-1 was about 16% faster, at 255 seconds. A straight Finder copy took 197 seconds. Using the Unix cp command actually took 312 seconds, so the Finder is doing some surprising optimizations under the hood.

 

 

评论
发表评论

您还没有登录,请登录后发表评论

wutao8818
搜索本博客
我的相册
6b189252-4523-3f66-9b60-b4c688770fec-thumb
电信搞什么
共 12 张
最近加入圈子
存档
最新评论
  • 部署django记
    不知道。现在自己有服务器了。就不用虚拟主机了。
    -- by wutao8818
  • 部署django记
    有没有其他python虚拟主机服务的介绍
    -- by jimichan
  • 部署django记
    我现在已经不用他们的主机了。服务质量太差。有些东西问他们觉得不是他们的事情就不管 ...
    -- by wutao8818
  • 部署django记
    请问,那些静态文件 如 css、images 怎么配置呢?我也打算发布在他们那里
    -- by jimichan
  • NIO
    好,明白为什么存在了,谢谢
    -- by chyy001