Java学习之流Stream理解(一)
缓存可以说是I/O的一种性能优化。缓存流为I/O流增加了内存缓冲区。有了缓冲区,使得在流上执行skip()、mark()和reset()方法都称为可能。
1.BufferedInputStream 类 和 BufferedOutputStream 类
BufferedInputStream 类可以对任意的 InputStream 类 进行带缓冲区的包装以达到性能的优化。BufferedInputStream 类有两个构造函数:
BufferedInputStream (InputStream in )
BufferedInputStream (InputStream in,int size )
第一种形式的构造函数创建一个带有32个字节的缓冲流;第二种形式的构造函数按指定大小来创建缓冲区。一个最优的缓冲区的大小,取决于它的操作系统、可用的内存以及及其配置,从构造函数可以看出,BufferedInputStream 对象位于InputStream 对象之前,字节数据读取文件的过程:

使用BufferedOutputStream输出信息和向OutputStream输入信息完全一致,只不过BufferedOutputStream有一个flush()方法用来将缓存区的数据强制输出完。BufferedOutputStream 也有两个构造函数:
BufferedOutputStream(OutputStream out)
BufferedOutputStream(OutputStream out,int size)
第一种构造函数创建一个32字节的缓存区,第二种形式以指定的大小来创建缓存区。flush()方法就是用于即使缓存区没有满的情况下,也将缓存区的内容强制写入到外设,习惯称这个过程为刷新。flush()方法只对使用缓存区的OutputStream 类的子类有效。当调用close()方法时,系统在关闭流之前,也会将缓存区中信息刷新到磁盘文件中。
2、BufferedReader类和BufferedWriter类
BufferedReader类和BufferedWriter类分别继承Reader类和Writer类。这两个类同样具有内部缓存机制,并可以以行为单位进行输入/输出。根据BufferedReader类的特点,字符读取文件的过程。

BufferedReader类常用的方法:
read():读取单个字符。
readLine():读取一个问本行,并将其返回为字符串;若无数据可读,则返回null 。
write(String s ,int offset,int len):写入字符串的某一部分 。
flush():刷新该流的缓存。
newLine():写入一个 行分隔符。
在使用BufferedWriter类的writer()方法时,数据并没有立即被写入至输出流中,而是首先进入缓存区中。如果想立刻将缓存区中的数据写入输出流中,一定要调用flush()方法。
Java学习之流Stream理解(一)的更多相关文章
- 【转】输入/输出流 - 深入理解Java中的流 (Stream)
基于流的数据读写,太抽象了,什么叫基于流,什么是流?Hadoop是Java语言写的,所以想理解好Hadoop的Streaming Data Access,还得从Java流机制入手.流机制也是JAVA及 ...
- 深入理解 Java中的 流 (Stream)
首先,流是什么? 流是个抽象的概念.是对输入输出设备的抽象,Java程序中,对于数据的输入/输出操作都是以"流"的方式进行.设备能够是文件,网络,内存等. 流具有方向性,至于是输入 ...
- 吴裕雄--天生自然 JAVA开发学习:流(Stream)、文件(File)和IO
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //使用 BufferedReader 在控制台读取 ...
- Java学习IO流第一天
今日内容介绍 字节流 字符流 1 字节流 在前面的学习过程中,我们一直都是在操作文件或者文件夹,并没有给文件中写任何数据.现在我们就要开始给文件中写数据,或者读取文件中的数据. 1.1 字节输出流Ou ...
- Java学习笔记之深入理解引用
引言:Java中数据传递的方式,除了基本数据类型是按照值传递,其它类型全部是按照引用传递,这和C++有很大区别,但是很多网上文章都解释的不清楚,甚至是错误的,在查阅资料之后,下面整理出一个比较容易理解 ...
- 【疯狂Java学习笔记】【理解面向对象】
[学习笔记]1.Java语言是纯粹的面向对象语言,这体现在Java完全支持面向对象的三大基本特征:封装.继承.多态.抽象也是面向对象的重要组成部分,不过它不是面向对象的特征之一,因为所有的编程语言都需 ...
- java学习——IO流
字符流的由来:其实就是:字节流读取文字字节数据后,不直接操作而是先查指定的编码表.获取对应的文字.在对这个文字进行操作.简单说:字节流+编码表 ---------------------------- ...
- Java学习笔记13---如何理解“子类重写父类方法时,返回值若为类类型,则必须与父类返回值类型相同或为其子类”
子类重新实现父类的方法称重写:重写时可以修改访问权限修饰符和返回值,方法名和参数类型及个数都不可以修改:仅当返回值为类类型时,重写的方法才可以修改返回值类型,且必须是父类方法返回值的子类:要么就不修改 ...
- Java学习之并发多线程理解
1.线程简介: 世间万物会同时完成很多工作,如人体同时进行呼吸.血液循环.思考问题等活动,用户既可以使用计算机听歌也可以使用它打印文件,而这些活动完全可以同时进行,这种思想在Java中称为并发,而将并 ...
随机推荐
- linux虚拟机时间不准的问题
如果时区不准, 使用tzselect命令(timezone选择),选择北京时间.然后把输出的命令写入/etc/profile.d/time.sh里. 然后用crontab写定时任务,每天执行一次. 3 ...
- 学习JavaScript数据结构与算法 (一)
学习JavaScript数据结构与算法 的笔记, 包含一二三章 01基础 循环 斐波那契数列 var fibonaci = [1,1] for (var i = 2; i< 20;i++) { ...
- JavaScript--字符串常用方法总结
JavaScript--字符串常用方法总结 举例模板: var str = "what are you " var str1 = "sss" var txt = ...
- 转 sql 查出一张表中重复的所有记录数据
select * from DB_PATCH awhere lower(a.db_name) in (select lower(db_name) from DB_PATCH group by lowe ...
- 利用uiautomator实现Android移动app启动时间的测试
为了减少因手工测试的反应误差,这里介绍下如何利用Android自带的自动化测试工具uiautomator实现app启动时间的测试. 测试基本思路如下: 1.启动前记录当前的时间戳 2.启动app,直至 ...
- v-bind和v-on
v-bind指令用于设置HTML属性:v-bind:href 缩写为 :href <a :href="{{url}}">aa</a> v-on 指令用于绑 ...
- eclipse导入php项目
整个工程的都在一个文件夹里面 怎么把它导入到eclipse里面呢:在eclipse里新建一个与要导入的工程同名工程.
- asp.net 微信登录实现方式
之前我以为做微信登录跟微信公众号有关,后来发现是我想多了.原来微信还有一个叫开放平台的东西,见下图: 我的这个已经生成好了,没有的需要创建一个,https://open.weixin.qq.com/c ...
- Git之远程项目克隆到本地配置
远程代码克隆到本地工作区,需要进行简单的配置,用于识别身份 1.git config --global user.name [设置用户名,你的github用户名] 2.git config -- ...
- QQ面板拖拽(慕课网DOM事件探秘)(上)
QQ面板拖拽,效果如图 JavaScript代码如下: function getByClass(clsName, parent) { var oParent = parent ? document.g ...