时间(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 代码:
packagecom;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.nio.ByteBuffer;
importjava.nio.channels.FileChannel;
importjunit.framework.TestCase;
/**
* NIO read write test
*
* @author wutao
*
*/
publicclassNioDemoextendsTestCase {
publicvoidtestRead()throwsIOException {
int[] sizes = {10000,1000,100,50,5,1};
// Arrays.sort(sizes);
System.out.println(newFile("text.txt").length());
for(inti =0; i
intsize = sizes[i];
FileInputStream fins =newFileInputStream("text.txt");
FileChannel fc = fins.getChannel();
if(!newFile("text2.txt").exists()) {
newFile("text2.txt").createNewFile();
}
ByteBuffer buffer = ByteBuffer.allocate(size);
FileOutputStream fouts =newFileOutputStream("text2.txt");
FileChannel fc2 = fouts.getChannel();
longstart = System.currentTimeMillis();
while(true) {
buffer.clear();
intr = fc.read(buffer);
if(r == -1) {
break;
}
buffer.flip();
fc2.write(buffer);
}
longend = System.currentTimeMillis();
System.out.println("---------"+ size +"---------");
System.out.println(end - start);
fc.close();
fc2.close();
fins.close();
fouts.close();
}
}
}
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
importjava.io.*;
importjava.nio.*;
importjava.nio.channels.*;
publicclassNIOCopier {
publicstaticvoidmain(String[] args)throwsIOException {
FileInputStream inFile =newFileInputStream(args[0]);
FileOutputStream outFile =newFileOutputStream(args[1]);
FileChannel inChannel = inFile.getChannel( );
FileChannel outChannel = outFile.getChannel( );
for(ByteBuffer buffer = ByteBuffer.allocate(1024*1024);
inChannel.read(buffer) != -1;
buffer.clear( )) {
buffer.flip( );
while(buffer.hasRemaining( )) outChannel.write(buffer);
}
inChannel.close( );
outChannel.close( );
}
}
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.
原文链接:http://wutaoo.iteye.com/blog/94666
【编辑推荐】
【责任编辑:小林 TEL:(010)68476606】
点赞 0