- 论坛徽章:
- 0
|
看了某些资料说java的nio性能比java的传统io提高很多,随便写了一个copy文件的程序,发现真的是提高差不多一倍以上。不过还是有点不明白,我用nio中的两种方法来copy文件,在windows下就相差无几,但在linux下就差十几倍,很疑惑。
代码一:
- import java.io.*;
- import java.nio.*;
- public class TestSpeed2
- {
- public static void main(String[] args) throws Exception
- {
- long t1 = System.currentTimeMillis();
- for(int i=0; i<200; i++)
- {
- java.nio.channels.FileChannel fin = new java.io.FileInputStream(args[0]).getChannel();
- java.nio.channels.FileChannel fout = new java.io.FileOutputStream(args[0]+"."+i).getChannel();
- fin.transferTo(0, fin.size(), fout);
- fin.close();
- fout.close();
- }
- long t2 = System.currentTimeMillis();
- System.out.println(t2-t1);
- }
- }
复制代码
代码二:
- import java.io.*;
- import java.nio.*;
- public class TestSpeed4
- {
- public static void main(String[] args) throws Exception
- {
- long t1 = System.currentTimeMillis();
- java.nio.ByteBuffer bb = java.nio.ByteBuffer.allocate(10240);
- for(int i=0; i<200; i++)
- {
- bb.clear();
- java.nio.channels.FileChannel fin = new java.io.FileInputStream(args[0]).getChannel();
- java.nio.channels.FileChannel fout = new java.io.FileOutputStream(args[0]+"."+i).getChannel();
-
- while(fin.read(bb) != -1)
- {
- bb.flip();
- fout.write(bb);
- bb.clear();
- }
- fin.close();
- fout.close();
- }
- long t2 = System.currentTimeMillis();
- System.out.println(t2-t1);
- }
- }
复制代码
谁能告诉我为什么?我要怎样改动代码二才能使它像代码一同样快或者差别不那么大呢? |
|