流和缓冲区
Buffer即缓冲区,是包含有一定量数据的容器。有些人认为流就是缓冲区,其实非也。流是随着时间产生的数据序列,而缓冲区顾名思义就是起缓冲作用的,缓冲的本质是排队,流的本质是数据。缓冲区我们可以理解为一个水管,满足FIFO,如果我们不设置缓冲区,那么就会增加系统的不稳定性和安全性。比如系统对接过程中,不设置缓冲区,对于其它系统作出的请求都得立即响应,疲于奔命直至系统崩溃。而增加缓冲区成本低,可以批量处理,效果杠杠的。
在Java我们比较熟悉的数据流主要包含四种基本的类,InputStream、OutputStream、Reader及Writer类,它们分别处理字节流和字符流,接下来我们将通过文件写入和读取的例子来熟悉流和缓冲区的差别及使用。
文件读取和写入
我们在进行文件读取的时候,可以通过FileInputStream(继承InputStream抽象类)通过字节的方式读取文件,适合读取所有类型的文件(图像、视频、文本文件等)。Java也提供了FileReader专门读取文本文件。
FileOutputStream(继承OutputStream抽象类) 通过字节的方式写数据到文件中,适合所有类型的文件。Java也提供了FileWriter专门写入文本文件。
Random random=new Random();
String fileName="word";
FileOutputStream out=new FileOutputStream(fileName);
long start=System.currentTimeMillis();
for(int i=0;i<1000000;i++){
for(int j=0;j<5;j++){
out.write(97+random.nextInt(5));
}
}
out.close();