缓冲流:BufferedInputStream / BufferedOutputStream

  • 提高IO效率,减少访问磁盘的次数
  • 数据存储在缓冲区,调用flush将缓存区的内容写入文件中,也可以直接close

BufferedInputStream 继承 FilterInputStream.

在创建BufferedInputStream时,会创建一个内部缓冲区数组。

构造方法:

  • BufferedInputStream(InputStream in)   //创建一个BufferedInputStream并保存其参数,即输入流in,以便将来使用
  • BufferedInputStream(InputStream in,int size)  //创建具有指定缓冲区大小的BufferedInputStream并保存其参数,即输入流in,以便将来使用

方法:     int availble()  //返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字数

      void close() //关闭此输入流并释放与该流关联的所有系统资源

      void mark(int readlimit)  //在此输入流中标记当前位置

      abstract int read()  //从输入流中读取数据的下一个字节

      int read(byte[] b)  //从输入流中读取一定数量的字节,并将其存储在缓存区数组b中

      int read(byte[] b, int off, int len)  //在指定位置将输入流中最多len个数据字节读入b数组

      void reset() //将此流重新定位到最后一次对此输入流调用mark方法时的位置

        long skip(long n)  //跳过和丢弃此输入流中数据的n个字

BufferedOutputStream 与FileOutputStream的方法大致相同,此处省略了就

两者的使用如下

package com.java.leetcode.io;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException; /*
使用字节缓冲流
*/
public class Buffered01 {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("D:\\stream01.txt");
BufferedInputStream bis = new BufferedInputStream(fis);
//读取
// int data = 0; //一次读一个
// while ((data = bis.read()) != -1){
// System.out.print((char)data);
// }
//也可以自己创建缓冲区 //bis 和 buffer都是缓冲区
byte[] buffer = new byte[1024];
int count = 0;
while ((count=bis.read(buffer)) != -1){
System.out.print(new String(buffer,0,count));
}
bis.close(); //fis可不关闭 FileOutputStream fos = new FileOutputStream("D:\\stream01.txt",true);
BufferedOutputStream bos = new BufferedOutputStream(fos);
//写入文件
for (int i = 0; i < 2; i++) {
bos.write("buffered".getBytes()); //先写入缓冲区,没有真正写入文件
bos.flush();//写一次刷新一次,此时才刷新到硬盘。效率不高,但是可以防止数据的丢失
}
bos.close();//fos可不关闭,这里调用close()时,内部会调用flush
System.out.println();
}
}

IO——字节缓冲流的更多相关文章

  1. Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream)

    Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在我们学习字 ...

  2. java——io、字节流缓冲区拷贝文件、字节缓冲流

    使用try catch finally关闭文件流: 写入文件: import java.io.*; public class exp{ public static void main(String[] ...

  3. File类的特点?如何创建File类对象?Java中如何操作文件内容,什么是Io流Io流如何读取和写入文件?字节缓冲流使用原则?

    重难点提示 学习目标 1.能够了解File类的特点(存在的意义,构造方法,常见方法) 2.能够了解什么是IO流以及分类(IO流的概述以及分类) 3.能够掌握字节输出流的使用(继承体系结构介绍以及常见的 ...

  4. java学习笔记30(IO :缓冲流)

    缓冲流: 读取数据大量的文件时,读取的速度慢,java提供了一套缓冲流,提高IO流的效率: 缓冲流分为字节缓冲流和字符缓冲流: 字节输入缓冲流和字节输出缓冲流如下: package com.zs.De ...

  5. Java字节缓冲流和字符缓冲流学习

    1.字节缓冲流 首先要明确一个概念:对文件或其他目标频繁的读写操作,效率低,性能差. 使用缓冲流的好处是,能够高效的读写信息,原理是将数据先缓冲起来,然后一起写入或者读取出来. BufferedInp ...

  6. 字节缓冲流 ( BufferedInputStream / BufferedOutputStream)

    package com.sxt.reader; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; imp ...

  7. IO异常--缓冲流--转换流--序列化流( IO流2 )

    1.IO异常的处理 JDK7前处理:使用try...catch...finally 代码块,处理异常部分 // 声明变量 FileWriter fw = null; try { //创建流对象 fw ...

  8. 字节缓冲流 BufferedOutputStream BufferedInputStream

    /*缓冲流:读取数据大量的文件时,读取的速度慢java提供了一套缓冲流 提高io流的效率 * */ package cn.lijun.demo; import java.io.BufferedInpu ...

  9. Java 之 字节缓冲流

    一.字节缓冲输出流 java.io.BufferedOutputStream extends OutputStream BufferedOutputStream:字节缓冲输出流. 继承自父类的共性成员 ...

随机推荐

  1. SpringMVC前后端分离交互传参详细教程

    温故而知新,本文为一时兴起写出,如有错误还请指正 本文后台基于SpringBoot2.5.6编写,前端基于Vue2 + axios和微信小程序JS版分别编写进行联调测试,用于理解前后端分离式开发的交互 ...

  2. FusionCube 9000 虚拟化之数据库场景(虚拟化超融合基础设施)

    1.本场景为fusioncube9000虚拟化场景,带两台dbn节点. 配置清单: 1台cna节点 2台dbn节点,部署数据库操作系统,一般安装oracle数据双机. 2台mcna节点,作为管理节点, ...

  3. 浅析Java反射--Java

    前言 上篇文章我们提到了可以使用反射机制破解单例模式.这篇文章我们就来谈一谈什么是反射,反射有什么用,怎么用,怎么实现反射. 概述 Java的反射(reflection)机制:是指在程序的运行状态中, ...

  4. bzoj5315/luoguP4517 [JSOI2018]防御网络(仙人掌,dp)

    bzoj5315/luoguP4517 防御网络(仙人掌,dp) bzoj Luogu 题目描述略(太长了) 题解时间 本题和斯坦纳树无关. 题面保证了是一个仙人掌...? 但这个环之间甚至交点都没有 ...

  5. EasyExcel完成excel文件的导入导出

    简介 常见的Excel分析框架有Apache poi 和EasyExcel, poi在另一篇已经介绍过了,详情可以看[https://www.cnblogs.com/jasmine-e/p/16064 ...

  6. v-for key值?

    不写key值会报warning, 和react的array渲染类似. 根据diff算法, 修改数组后, 写key值会复用, 不写会重新生成, 造成性能浪费或某些不必要的错误

  7. vue自定义指令?

    除核心指令之外的指令, 使用directive进行注册. 指令自定义钩子函数: bind, inserted, update, componentUpdated, unbind

  8. Gradle Gretty进行runAppDebug的Listening for transport dt_socket at address: 5005 的后续配置

    出现 Listening for transport dt_socket at address: 5005:代表debug端口已启动好了,接下来你需要进行配置远程Debug,进行附加Debug进程: ...

  9. Hibernate的一级缓存和二级缓存有什么区别?

    第一级缓存由Session实例维护,它是必选的,其中保持了Session当前所有关联实体的数据,也称为内部缓存.而第二级缓存则存在于SessionFactory层次,它是可选的.一级缓存只能为当前线程 ...

  10. java-方法引用

    /** * 方法引用格式: * 双冒号:: 引用运算符,它所在的表达式被称为方法引用.如果Lambda表达式 * 的函数方案已经存在于某个地方的实现中, * ===>那么可以通过双冒号来引用改方 ...