Java高效缓冲区的代码 java高效缓冲区的代码怎么写

怎么理解java中BufferedInputStream的缓冲作用,就这张图中的一段代码来说,BufferedInputStream主要是内存缓冲区,文件的读取是先将文件读取到内存中 。如有程序部署是机器资源限制不可能分配很大内存,如果读取超大文件很容易造成内存溢出BufferedInputStream是将文件的一部分(大小有你指定)缓冲到内存,程序处理完后继续缓存下一个指定大小,直到全部读取 。
菜鸟学习java,求大神解释下面的代码各段是什么意思,尽量详细,谢谢Zip.java
import java.io.*;
import java.util.zip.*;
public class Zip {
static final int BUFFER = 2048; // 定义缓冲区大小
public static void main (Stringargv[]) {
try {
BufferedInputStream origin= null;// 创建带有缓冲区的inputstrream
FileOutputStream dest = new
FileOutputStream("c:\\zip\\myfigs.zip");// 创建文件输出流,并打开zip文件CheckedOutputStream checksum = new
CheckedOutputStream(dest,new Adler32()); // 创建过滤流,并验证数据的完整性
ZipOutputStream out = new
ZipOutputStream(new
BufferedOutputStream(checksum));// 创建压缩文件输出流,并传入参数
//out.setMethod(ZipOutputStream.DEFLATED);
byte data[] = newbyte[BUFFER];// 创建字节数组
// get a list of files fromcurrent directory
File f = newFile("."); // 创建File变量读取根目录用于文件的读写
String files[] = f.list(); // 读取f文件夹下所有的文件名
for (int i=0; i files.length; i++) { // 根据文件名的数量进行循环
System.out.println("Adding: "+files[i]); // 打印出添加的文件名到控制台
FileInputStream fi = new
FileInputStream(files[i]); // 创建文件读取流,读取当前循环到的文件
origin = new
BufferedInputStream(fi, BUFFER); // 把文件流放入带有缓冲区的inputstream,并指定缓冲区大小
ZipEntry entry = newZipEntry(files[i]); // 创建zip压缩入口实例化,放入当前循环到的文件
out.putNextEntry(entry); // 输出流中放入压缩的文件
int count;
while((count =origin.read(data, 0,
BUFFER)) != -1) {// 当count值等于缓冲区读取的数据字节大小,且不等于-1
out.write(data, 0,count); // 输出流写入count字节大小的数据
}
origin.close();// 关闭带有缓冲区的inputstream
}
out.close(); // 关闭输出流
System.out.println("checksum:
"+checksum.getChecksum().getValue()); // 打印验证压缩文件的值到控制台
} catch(Exception e) { // 捕捉异常
e.printStackTrace(); // 打印异常信息
}
}
}
关于java的io读写 , 缓冲区是如何提高读写效率的???给你一个例子自己看看吧,加深理解
我们知道Java中一般的输入输出流类都是用单字节的读取方法来进行I/O操作的 , 也就是说每次只读写一个字节的数据,这种方法显然繁琐低效 。如果从设备读取10M的文件,每次读取一个字节,完成操作将需要做10M/次I/O操作,I/O操作又是一件相当耗时的事情 , 无疑在很大程度上降低了系统的性能 。
Java中专门提供提高I/O效率的缓冲类,这好比在数据读写时提供一个临时缓冲区 , 每次读取一个缓冲区大小的数据,将这数据库一次性写入目标设备 。下图中分别为两种读取方式 。
举个简单例子 , 在A地有10000本书需要搬到B地,如果一次搬1本,需要10000次 。如果每次取1000本放到一个货车上,运到B地,需要10次完成 。货车相当于是缓存区 。同样道理,开设一个数据缓存区每次读取一数据块对于提高读取效率有显著提升 。下面用一个具体代码示例来表示二者的性能差别 。
Java代码
import java.io.BufferedInputStream;

推荐阅读