首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

JAVA I/O性能优化之性能比较-MappedBuffer ,Stream

2012-09-09 
JAVA I/O性能优化之性能比较-------MappedBuffer ,Streamimport java.io.BufferedInputStreamimport java

JAVA I/O性能优化之性能比较-------MappedBuffer ,Stream

import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.RandomAccessFile;import java.nio.IntBuffer;import java.nio.channels.FileChannel;public class compareMappedAndStream {private static int numOfInts = 4000000;private static int numOfUbuffInts = 2000000;private abstract static class Tester {private String name;public Tester(String name) {this.name = name;}public void runTest() {System.out.print(name + ": ");try {long start = System.nanoTime();//test();double duration = System.nanoTime() - start;System.out.format("%.2f\n", duration / 1.0e9);} catch (IOException e) {throw new RuntimeException(e);}}public abstract void test() throws IOException;}/** * 测试各种流的效率 */private static Tester[] tests = {/** * 测试Stream写的效率 */new Tester("Stream Write") {@Overridepublic void test() throws IOException {DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(new File("temp.tmp"))));for (int i = 0; i < numOfInts; i++) {dos.writeInt(i);}dos.close();}},/** * 测试内存映射写的效率 */new Tester("Mapped Write") {@Overridepublic void test() throws IOException {FileChannel fc = new RandomAccessFile("temp.tmp", "rw").getChannel();IntBuffer ib = fc.map(FileChannel.MapMode.READ_WRITE, 0, fc.size()).asIntBuffer();for (int i = 0; i < numOfInts; i++) {ib.put(i);}fc.close();}},/** * 测试Steam读的效率 */new Tester("Stream Read") {@Overridepublic void test() throws IOException {DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream("temp.tmp")));for (int i = 0; i < numOfInts; i++) {dis.readInt();}dis.close();}}, /** * 测试Mapped读的效率 */new Tester("Mapped Read") {@Overridepublic void test() throws IOException {FileChannel fc = new FileInputStream(new File("temp.tmp")).getChannel();IntBuffer ib = fc.map(FileChannel.MapMode.READ_ONLY,0,fc.size()).asIntBuffer();while(ib.hasRemaining()){ib.get();}fc.close();}},new Tester("Stream Read/Write"){@Overridepublic void test() throws IOException {RandomAccessFile raf = new RandomAccessFile(new File("temp.tmp"), "rw");raf.writeInt(1);for(int i = 0 ; i < numOfUbuffInts ; i ++){raf.seek(raf.length() - 4);raf.writeInt(raf.readInt());}raf.close();}},new Tester("Mapped Read/Write"){@Overridepublic void test() throws IOException {FileChannel fc = new RandomAccessFile("temp.tmp", "rw").getChannel();IntBuffer ib = fc.map(FileChannel.MapMode.READ_WRITE,0,fc.size()).asIntBuffer();ib.put(0);for(int i = 1 ; i < numOfUbuffInts ; i ++){ib.put(ib.get(i -1));}fc.close();}}};/** * 测试 * @param args */public static void main(String[] args) {for(Tester tester : tests){tester.runTest();}}}运行结果:Stream Write: 0.46Mapped Write: 0.04Stream Read: 0.46Mapped Read: 0.04Stream Read/Write: 43.14Mapped Read/Write: 0.04
?

热点排行