缓冲和缓存的区别
一、缓冲buffer
缓冲的作用就是协调上下层应用之间的性能差异,提升系统性能。
通过缓冲区的缓冲,当上层组件的性能优于下层组件的时候,缓冲可以有效的减少上层组件对下层组件等待的时间。
基于这样的结构,上层组件不需要等待下层组件完全接收全部数据,即可返回进行其他操作,加快了上层组件的处理速度,从而提升整个系统的性能。
不使用缓冲区
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class NoBufferTest {
public static void main(String[] args) {
Writer writer=null;
try {
writer= new FileWriter("E:\\file.txt");
long num=100000;
long beginTime=System.currentTimeMillis();
for (int i = 0; i < num; i++) {
writer.write(i);
}
long endTime=System.currentTimeMillis();
System.out.println("未使用缓冲区耗时:"+(endTime-beginTime)+"ms");//未使用缓冲区耗时:25ms
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
使用缓冲区
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class BufferTest {
public static void main(String[] args) {
Writer writer = null;
BufferedWriter bufferedWriter = null;
try {
writer = new FileWriter("E:\\file.txt");
bufferedWriter = new BufferedWriter(writer);
long num = 100000;
long beginTime = System.currentTimeMillis();
for (int i = 0; i < num; i++) {
bufferedWriter.write(i);
}
long endTime = System.currentTimeMillis();
System.out.println("使用缓冲区耗时:" + (endTime - beginTime) + "ms");//使用缓冲区耗时:13ms
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bufferedWriter.close();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
BufferedWriter有两个构造器
BufferedWriter(Writer writer);//默认创建8kb的缓冲区 private static int defaultCharBufferSize = 8192;
BufferedWriter(Writer writer, int size);//自己指定缓冲区大小,指定的时候需要适中,太小起不到缓冲作用,太大会浪费系统资源,增加GC的负担。
二、缓存cache
还层缓存也是为了提升系统性能而单独开辟的一块空间,和缓冲不同的是,缓存是把反复使用的数据存储起来,供程序直接使用,避免程序反复从数据库中读取相同的数据。
在ORM框架中使用很多,MyBatis,Hibernate等都有缓存机制。