Java IO包之缓冲Buffer输入输出流
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java IO包之缓冲Buffer输入输出流,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3962字,纯文字阅读大概需要6分钟。
内容图文
Java IO包之缓冲Buffer输入输出流
- 什么是缓冲Buffer 它是内存空间的一部分,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分空间就叫做缓冲区,缓冲区是具有一定大小的
- 为啥要用缓冲
- 缓冲,缓和冲击,例如操作磁盘比内存慢的很多,所以不用缓冲区效率很低
- 数据传输速度和数据处理的速度存在不平衡,比如你每秒要写100次硬盘,对系统冲击很大,浪费了大量时间在忙着处理开始写和结束写这两个事件,用buffer暂存起来,变成每10秒写一次硬盘,数据可以直接送往缓冲区,高速设备不用再等待低速设备,对系统的冲击就很小,写入效率高了
- Java lO包里面的两个缓冲类(高级流)
- BufferlnputStream和BufferOutputStream
- 采用包装设计模式(锦上添花的意思)
- BufferlnputStream 缓冲字节输入
- BufferedlnputStream 通过预先读入一整段原始输入流数据至缓冲区中,而外界对BufferedlnputStream的读取操作实际上是在缓冲区上进行,如果读取的数据超过了缓冲区的范围,那么BufferedlnputStream负责重新从原始输入流中载入下一截数据填充缓冲区,然后外界继续通过缓冲区进行数据读取。
- 好处:避免了大量的磁盘IO,原始的InputStream类实现的read是即时读取的,每一次读取都会是一次磁盘IO操作(哪怕只读取了1个字节的数据),如果数据量巨大,这样的磁盘消耗非常可怕。
- 缓冲区的实现:读取可以读取缓冲区中的内容,当读取超过缓冲区的内容后再进行一次磁盘10,载入一段数据填充缓冲,下一次读取一般情况就直接可以从缓冲区读取,减少了磁盘io。
- 默认缓冲区大小是8k.int DEFAULT BUFFER SIZE=8192:
- 常见构造函数
//对输入流进行包装,里面默认的缓冲区是8k public BufferedInputStream(InputStream in);
//对输入流进行包装,指定创建具有指定缓冲区大小的public BufferedInputStream(InputStream in,int size);
- 常用的两个方法
/从输入流中读取一个字节 public int read(); //从字节输入流中给定偏移量处开始将各字节读取到指定的byte数组中。public int read(byte[]buf,int off,int len); //关闭释放资源,关闭的时候这个流即可,InputStream会在里面被关闭void close();
- BufferOutputStream 缓冲字节输出流
- 常见构造函数
//对输出流进行包装,里面默认的缓冲区是8k public BufferedoutputStream(OutputStream out);
//对输出流进行包装,指定创建具有指定缓冲区大小的public BufferedoutputStream(OutputStream out,int size);
- 常用的三个方法
//向输出流中输出一个字节public void write(int b);
//将指定byte 数组中从偏移量off开始的1en个字节写入缓冲的输出流。public void write(byte[]buf,int off,int 1en);
//刷新此缓冲的输出流,强制使所有缓冲的输出字节被写出到底层输出流中。public void flush();
//关闭释放资源,关闭的时候这个流即可outputStream会在里面被关闭,JDK7新特性try(在这里声明的会自动关闭){}void close();
- EG
package domee.chapter10_4;
import java.io.*;
public class Main {
public static void main(String[] args)throws IOException {
String dir = "C:\\Users\\123\\Desktop\\test";
String name1 = "a.txt";
String name2 = "b.txt";
File file1 = new File(dir,name1);
File file2 = new File(dir,name2);
InputStream inputStream = new FileInputStream(file1);
OutputStream outputStream = new FileOutputStream(file2);
BufferedInputStream BufInputStream = new BufferedInputStream(inputStream);
//read(BufinputStream);
BufferedOutputStream BufOutputStream = new BufferedOutputStream(outputStream);
write(BufInputStream,BufOutputStream);
}
public static void read(BufferedInputStream bufferedInputStream) throws IOException {
byte[] bytes = new byte[bufferedInputStream.available()];
int lenght;
while ((lenght = bufferedInputStream.read(bytes)) != -1){
System.out.print(new String(bytes,0,lenght));
}
bufferedInputStream.close();
}
public static void write(BufferedInputStream bufferedInputStream,BufferedOutputStream bufferedOutputStream)throws IOException{
byte[] bytes = new byte[bufferedInputStream.available()];
int lenght;
while ( (lenght = bufferedInputStream.read(bytes))!= -1){
bufferedOutputStream.write(bytes,0,lenght);
}
bufferedInputStream.close();
bufferedOutputStream.close();
}
}
- NOTE:
- BufferedOutputStream在close()时会自动flush
- BufferedOutputStream在不调用close()的情况下,缓冲区不满,又需要把缓冲区的内容写入到文件或通过网络发送到别的机?时,才需要调用flush.
public void close() throws IOException {
try (OutputStream ostream = out) {
flush();
}
}
- 流的关闭顺序
- 后开先关, 如果A依赖B,先关闭B
内容总结
以上是互联网集市为您收集整理的Java IO包之缓冲Buffer输入输出流全部内容,希望文章能够帮你解决Java IO包之缓冲Buffer输入输出流所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。