考试辅导

名师推荐

试听名师的课 查看所有名师

2011年计算机等级考试二级JAVA学习(19) 发布时间:2011-07-23 11:11 来源:互联网

2011年计算机等级考试二级JAVA学习(19)

1.1.3.2.2 缓冲

方法 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] == '\n')

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缺省输出,比在缺省的行缓冲情况下快了三倍。

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

第一考试网友情提示:如果您遇到任何疑问,请登录第一考试网考试辅导频道或添加qq:,第一考试网以“为考友服务”为宗旨,秉承“快乐学习,轻松考试!”的理念,旨在为广大考友打造一个良好、温馨的学习与交流平台,欢迎持续关注。以上是小编为大家推荐的《2011年计算机等级考试二级JAVA学习(19)》相关信息。

编辑推荐

计算机等级考试辅导:SQL中JOB的运行状态

计算机等级考试辅导:SQLSERVER2005的引用

三级:把数据导入不同的表空间

2009年三级信息管理技术辅导:战略数据规划

教你三种方法卸载Windows7SP1Beta