IO框架(三)字节缓冲流
IO框架(三)字节缓冲流
目录
缓冲流内容和目的
- 缓冲流:BufferedInputStream/BufferedOutputStream
- 作用:
- 提高IO效率,创建一个缓冲区,减少访问磁盘的次数
- 数据存储在缓冲区中,flush是将缓存区的内容写入文件中,也可以直接close
BufferedInputStream
- BufferedInputStream为输入流添加了一些功能(如缓冲输入和支持mark和支持reset的能力)
BufferedInputStream方法
protected byte[] |
buf ---> 存储数据的内部缓冲区数组。 |
|---|---|
protected int |
count ---> 索引一大于缓冲区中最后一个有效字节的索引。 |
protected int |
marklimit ---> mark方法调用后,最大超前允许,后续调用 reset方法失败。 |
protected int |
markpos ---> pos字段在最后一个 mark方法被调用时的值。 |
protected int |
pos ---> 缓冲区中的当前位置。 |
BufferedInputStream构造方法
BufferedInputStream(InputStream in) |
创建一个 BufferedInputStream并保存其参数,输入流 in ,供以后使用。 |
|---|---|
BufferedInputStream(InputStream in, int size) |
创建 BufferedInputStream具有指定缓冲区大小,并保存其参数,输入流 in ,供以后使用。 |
BufferedInputStream举例
-
举例1
public class Demo04 { public static void main(String[] args) throws Exception{ //创建输入流 FileInputStream fis=new FileInputStream("D:\\aaa.txt"); //将输入流放入缓冲区中 BufferedInputStream bis=new BufferedInputStream(fis); //读取 int data=0; while ((data=bis.read())!=-1){ System.out.println((char)data); } bis.close(); } } //输出: a b c d e f g -
举例2
public class Demo05 { public static void main(String[] args) throws Exception{ //创建输入流 FileInputStream fis=new FileInputStream("D:\\aaa.txt"); //将输入流放入缓冲区中 BufferedInputStream bis=new BufferedInputStream(fis); //读取 byte[] buf=new byte[1024]; int count=0; while ((count=bis.read(buf))!=-1){ System.out.println(new String(buf,0,count)); } //关闭 bis.close(); } } //输出: abcdefg
BufferedOutputStream
- BufferedOutputStream可以将数据写入到缓冲流,而不是文件中,只是作为辅助
BufferedOutputStream方法
void |
flush() 刷新缓冲输出流,(将数据从缓冲区存入文件中) |
|---|---|
void |
write(byte[] b, int off, int len) 从指定的字节数组写入 len个字节,从偏移 off开始到缓冲的输出流。 |
void |
write(int b) 将指定的字节写入缓冲的输出流 |
BufferedOutputStream构造方法
BufferedOutputStream(OutputStream out) |
创建一个新的缓冲输出流,以将数据写入指定的底层输出流。 |
|---|---|
BufferedOutputStream(OutputStream out, int size) |
创建一个新的缓冲输出流,以便以指定的缓冲区大小将数据写入指定的底层输出流。 |
BufferedOutputStream举例
-
举例1
public class Demo06 { public static void main(String[] args) throws Exception{ FileOutputStream fos=new FileOutputStream("D:\\ccc.txt"); //创建缓冲区并放入输出流 BufferedOutputStream bos=new BufferedOutputStream(fos); //写入缓冲区(是写入缓冲区不是输出流(文件)) for(int i=0;i<10;i++){ //将文字以字节的形式存入 bos.write("hello\n".getBytes());//写入缓冲区 } //写入(覆盖)文件中 bos.flush();//刷新到硬盘 } }

浙公网安备 33010602011771号