Java IO(十) BufferedInputStream 和 BufferedOutputStream
Java IO(十)BufferedInputStream 和 BufferedOutputStream
一、BufferedInputStream 和 BufferedOutputStream
(一)、BufferedInputStream
BufferedInputStream 是缓冲字节输入流,继承自FilterInputStream,它的作用是为另一个输入流对象提供一些额外的功能。如:缓冲功能,支持 mark(标记)和reset(重置)功能等。
BufferedInputStream 本质上是通过一个内部缓冲区数组实现的。例如,在新建某输入流对应的 BufferedInputStream 后,当我们通过read()读取输入流的数据时,BufferedInputStream会将该输入流的数据分批的填入到缓冲区中。每当缓冲区中的数据被读完之后,输入流会再次填充数据缓冲区;如此反复,直到我们读完输入流数据位置。
BufferedOutputStream 是缓冲字节输入流,继承自FilterOutputStream,它的作用是为另一个输出流对象提供缓冲功能。
二、构造方法
(一)、BufferedInputStream
(二)、BufferedOutputStream
三、常用API
(一)、BufferedInputStream
(二)、BufferedOutputStream
四、缓冲功能
(一)、BufferedOutputStream
BufferedOutputStream 为其它输出流提供缓冲功能。创建BufferedOutputStream 时,我们会通过它的构造函数指定某个输出流为参数。通过字节数组来缓冲数据,当缓冲区满或者用户调用 flush() 函数时,它就会将缓冲区的数据写入到输出流中。
(二)、BufferedInputStream
BufferedInputStream的作用是为其它输入流提供缓冲功能。创建BufferedInputStream时,我们会通过它的构造函数指定某个输入流为参数。BufferedInputStream会将该输入流数据分批读取,每次读取一部分到缓冲中;操作完缓冲中的这部分数据之后,再从输入流中读取下一部分的数据。缓冲中的数据实际上是保存在内存中,从内存中读取数据的速度更快从而提高性能。
分批读取而不一次性读取的好处:
- 缩短读取时间,提高读取性能。
- 减少内存空间占用。
五、实例
private static final byte[] buffer = "abcdefghijklmnopqrstvuwxyz".getBytes();
public static void main(String[] args) {
write();
read();
} /**
* BufferedOutputStream 测试
*/
public static void write() {
BufferedOutputStream out = null;
try {
out = new BufferedOutputStream(new FileOutputStream(new File("test.txt")));
out.write(buffer);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (out != null)
out.close();
}catch (Exception e) {
e.printStackTrace();
}
}
} /**
* BufferedInputStream 测试
*/
public static void read() {
BufferedInputStream in = null;
byte[] bu = new byte[10];
int len = 0;
try {
in = new BufferedInputStream(new FileInputStream(new File("test.txt")));
int temp = in.read();// 获取单字节数据
System.out.println("temp : " + (char)temp); in.mark(5);// 标记第五个元素
in.skip(10);// 跳过10个字节 len = in.read(bu,0,5);// 获取5字节数据
System.out.println("bu : " + new String(bu,0,len)); in.reset();// 重置 len = in.read(bu,0,5);// 获取5字节数据
System.out.println("bu : " + new String(bu,0,len));
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (in != null)
in.close();
}catch (Exception e) {
e.printStackTrace();
}
}
}
Java IO(十) BufferedInputStream 和 BufferedOutputStream的更多相关文章
- Java IO流 BufferedInputStream、BufferedOutputStream的基本使用
BufferedInputStream.BufferedOutputStream的基本使用 BufferedInputStream是FilterInputStream流的子类,FilterInputS ...
- java io系列13之 BufferedOutputStream(缓冲输出流)的认知、源码和示例
本章内容包括3个部分:BufferedOutputStream介绍,BufferedOutputStream源码,以及BufferedOutputStream使用示例. 转载请注明出处:http:// ...
- [Java] 过滤流BufferedInputStream和BufferedOutputStream
package test.stream; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ...
- 系统学习 Java IO (十六)----这么多类,应该用哪个?
目录:系统学习 Java IO---- 目录,概览 Java IO目的和功能 Java IO 包含 InputStream,OutputStream,Reader 和 Writer 类的许多子类. 原 ...
- 系统学习 Java IO (十二)----数据流和对象流
目录:系统学习 Java IO---- 目录,概览 DataInputStream/DataOutputStream 允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型. 要想使用 ...
- Java之IO(二)BufferedInputStream和BufferedOutputStream
转载请注明源出处:http://www.cnblogs.com/lighten/p/6971234.html 1.前言 本文主要介绍输入输出流中的BufferedInputStream和Buffere ...
- 系统学习 Java IO (十四)----字符读写缓存和回退 BufferedReader/BufferedWriter & PushbackReader
目录:系统学习 Java IO---- 目录,概览 BufferedReader BufferedReader 类构造器接收一个 Reader 对象,为 Reader 实例提供缓冲. 缓冲可以加快 I ...
- 系统学习 Java IO (十五)----字符读写 Reader/Writer 其他子类
目录:系统学习 Java IO---- 目录,概览 跟踪行号的缓冲字符输入流 LineNumberReader LineNumberReader 类是一个 BufferedReader ,用于跟踪读取 ...
- 系统学习 Java IO (十)----回退流 PushbackInputStream
目录:系统学习 Java IO---- 目录,概览 PushbackInputStream 旨在从 InputStream 解析数据时使用. 有时您需要先读取几个字节以查看将要发生的事情,然后才能确定 ...
- 高级Java工程师必备 ----- 深入分析 Java IO (三)
概述 Java IO即Java 输入输出系统.不管我们编写何种应用,都难免和各种输入输出相关的媒介打交道,其实和媒介进行IO的过程是十分复杂的,这要考虑的因素特别多,比如我们要考虑和哪种媒介进行IO( ...
随机推荐
- CentOS上安装比较习惯的代码编辑器
linux下的vim用起来不是很习惯,可能是能力有限.所以一直在找一种自己比较熟悉的代码编辑器,所以就找到了sublime text,安装方法网上有很多种,比较方便的方法:直接在csdn上下载一个破解 ...
- python——import日常学习记录
import为导入包,有两种方法,一个是import,一个是from ** import ** import后紧跟着的是个模块,一般是一个.py文件下的类名: from *** import *** ...
- 树莓派4B踩坑指南 - (15)搭建在线python IDE
今天想在树莓派上自己搭一个在线的python IDE,于是找到了一篇教程--Fred913大神的从头开始制作OJ-在线IDE的搭建 自己尝试动手做了一下, 还是发现不少细节需要注意, 记录在此 如果不 ...
- Python实现将网站域名解析为ip地址
起因 因为一些事情,需要将域名解析为ip地址,想到Python作为万能语言,就用Python来实现这个功能 代码 import socket url = 'shiyixirui.cn' res = s ...
- 编写HTML和CSS几点心得
HTML代码优化 表单域用fieldset包起来,并用legend说明其用途(注意在css初始化的时候把fieldset的border设为0,把legend的display设为none) 每个inpu ...
- kali2020解决安装pip的问题
在以前的版本中,我们需要安装pip时,只需要执行下面命令即可安装: apt-get install python-pip 但是在更新到2020.1以后,上面的命令安装会提示无法定位安装包的问题! 解决 ...
- 常见的DOS命令总结
常用的内部命令有MD.CD.RD.DIR.PATH.COPY.TYPE.EDIT.REN.DEL.CLS.VER.DATE.TIME.PROMPT. 常用的外部命令有DELTREE.FORMAT.DI ...
- 这是一篇致力于解决Linux小白无法安装tunctl工具的文章
计算机网络——搭建Linux下的实验环境并成功安装tunctl 各位如果是来解决安装tunctl的问题的,请直接到2.2部分的内容. 这个学期终于迎来了计算机网络这门课程,也终于能够进一步了解让我无数 ...
- @vue/cli 4.0+express 前后端分离实践
之前总结过一篇vue-cli 2.x+express+json-server实现前后端分离的帖子,@vue/cli3.0及4.0搭建的项目与vue-cli2.x的项目结构有很大的不同.这里对@vue/ ...
- DRF视图组件
DRF视图组件: CVB模式继承----五层 from django.views import View # Django的View from rest_framework.views import ...