• 高速缓存


    关于硬件的高速缓存的详细讨论超出了本文的讨论范围。但是在有些情况下软件高速缓存能被用于加速I/O。考虑从一个文本文件里面以随机顺序读取一行的情况,这样做的一个方法是读取所有的行,然后把它们存入一个ArrayList (一个类似Vector的集合类):

    import java.io.*;

    import java.util.ArrayList;

    public class LineCache {

       private ArrayList list = new ArrayList();

       public LineCache(String fn) throws IOException {

            FileReader fr = new FileReader(fn);

            BufferedReader br = new BufferedReader(fr);

            String ln;

            while ((ln = br.readLine()) != null)

                list.add(ln);

            br.close();

       }

       public String getLine(int n) {

            if (n < 0)

                throw new IllegalArgumentException();

            return (n < list.size() ? (String) list.get(n) : null);

       }

       public static void main(String args[]) {

            if (args.length != 1) {

                System.err.println("missing filename");

                System.exit(1);

            }

            try {

                LineCache lc = new LineCache(args[0]);

                int i = 0;

                String ln;

                while ((ln = lc.getLine(i++)) != null)

                     System.out.println(ln);

            } catch (IOException e) {

                System.err.println(e);

            }

       }

    }

    getLine 方法被用来获取任意行。这个技术是很有用的,但是很明显对一个大文件使用了太多的内存,因此有局限性。一个代替的方法是简单的记住被请求的行最近的100行,其它的请求直接从磁盘读取。这个安排在局域性的访问时很有用,但是在真正的随机访问时没有太大作用。

     

  • 相关阅读:
    Delphi线程的终止
    Delphi线程简介---Create及其参数、Resume、Suspend
    谈谈Delphi中的类和对象4---类是一种对数据和操作高度的封装机制 && 类是一种代码重用机制
    LeetCode:链表排序
    LeetCode 二叉树的最小深度
    hadoop的集群安装
    java线程池分析和应用
    Java thread中对异常的处理策略
    Thread interrupt方法解析
    如何偷Android的内存-Tricking Android MemoryFile
  • 原文地址:https://www.cnblogs.com/borter/p/9434271.html
Copyright © 2020-2023  润新知