zoukankan      html  css  js  c++  java
  • 缓冲

    方法 2 和 3 使用了缓冲技术, 大块文件被从磁盘读取,然后每次访问一个字节或字符。缓冲是一个基本而重要的加速I/O 的技术,而且有几个类支持缓冲(BufferedInputStream 用于字节, BufferedReader 用于字符)。

    一个明显得问题是: 缓冲区越大I/O越快吗?典型的Java缓冲区长1024 或者 2048 字节,一个更大的缓冲区有可能加速 I/O但是只能占很小的比重,大约5 到10%。

    方法4: 整个文件

    缓冲的极端情况是事先决定整个文件的长度,然后读取整个文件:

    import java.io.*;

    public class readfile {

       public static void main(String args[]) {

            if (args.length != 1) {

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

                System.exit(1);

            }

            try {

                int len = (int) (new File(args[0]).length());

                FileInputStream fis = new FileInputStream(args[0]);

                byte buf[] = new byte[len];

                fis.read(buf);

                fis.close();

                int cnt = 0;

                for (int i = 0; i < len; i++) {

                     if (buf[i] == ' ')

                         cnt++;

                }

                System.out.println(cnt);

            } catch (IOException e) {

                System.err.println(e);

            }

       }

    }这个方法很方便,在这里文件被当作一个字节数组。但是有一个明显得问题是有可能没有读取一个巨大的文件的足够的内存。

    缓冲的另一个方面是向窗口终端的文本输出。缺省情况下, System.out ( 一个PrintStream) 是行缓冲的,这意味着在遇到一个新行符后输出缓冲区被提交。对于交互来说这是很重要的,在那种情况下你可能喜欢在实际的输出前显示一个输入提示。

    方法 5: 关闭行缓冲

    行缓冲可以被禁止,像下面的例子那样:

    import java.io.*;

    public class bufout {

       public static void main(String args[]) {

            FileOutputStream fdout = new FileOutputStream(FileDescriptor.out);

            BufferedOutputStream bos = new BufferedOutputStream(fdout, 1024);

            PrintStream ps = new PrintStream(bos, false);

            System.setOut(ps);

            final int N = 100000;

            for (int i = 1; i <= N; i++)

                System.out.println(i);

            ps.close();

       }

    }

    这个程序输出整数1到100000缺省输出,比在缺省的行缓冲情况下快了三倍。

    缓冲也是下面将要展示的例子的重要部分,在那里,缓冲区被用于加速文件随机访问。

     

  • 相关阅读:
    ServletContext笔记
    Session笔记
    Cookie笔记
    递归实现取数组最大值
    栈结构实现队列结构
    返回栈中最小元素的两种实现O(1)
    数组实现不超过固定大小的队列(环形数组)
    双向链表实现栈和队列
    Windows Server 2008 R2 / Windows Server 2012 R2 安装 .NET Core 3.1
    Windows 7 / Windows Server 2008 R2 升级至 SP1
  • 原文地址:https://www.cnblogs.com/borter/p/9434240.html
Copyright © 2011-2022 走看看