TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
- 《java编程思想》第四版中用于比较新旧IO的测试模板
- import java.nio.*;
- import java.nio.channels.*;
- import java.io.*;
- public class MappedIO {
- private static int numOfInts = 4000000;
- private static int numOfUbuffInts = 200000;
- 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
- ", duration/1.0e9);//输出测试结果
- } catch(IOException e) {
- throw new RuntimeException(e);
- }
- }
- public abstract void test() throws IOException;//需要实现的测试内容
- }
- private static Tester[] tests = {
- new Tester("Stream Write") {
- public 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") {
- public 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();
- }
- },
- new Tester("Stream Read") {
- public 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();
- }
- },
- new Tester("Mapped Read") {
- public 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") {
- public 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") {
- public void test() throws IOException {
- FileChannel fc = new RandomAccessFile(
- new File("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();
- }
- }
- };
- public static void main(String[] args) {
- for(Tester test : tests)
- test.runTest();
- }
- } /* Output: (90% match)
- Stream Write: 0.56
- Mapped Write: 0.12
- Stream Read: 0.80
- Mapped Read: 0.07
- Stream Read/Write: 5.32
- Mapped Read/Write: 0.02
- *///:~
复制代码
源码下载:http://file.javaxxz.com/2014/10/29/235736609.zip |
|