Java BufferedInputStream Class

Java BufferedInputStream class 用于从输入流读取数据,和BufferedOutStream一样内部使用缓冲机制提高读取性能。

需要注意的是:

当读取流中字节时,内部缓冲区每次会自动重新填满多个字节。

当一个缓冲输入流创建时,一个内部缓冲区数组也会创建。

类定义

public class BufferedInputStream extends FilterInputStream  

构造函数

BufferedInputStream(InputStream in)
Creates a BufferedInputStream and saves its argument, the input stream in, for later use.

BufferedInputStream(InputStream in, int size)
Creates a BufferedInputStream with the specified buffer size, and saves its argument, the input stream in, for later use.

方法

int available()                            返回输入流中预计可读取字节数
int read()                                从输入流读取下一个字节
int read(byte[] b, int off, int ln)        从指定的byte输入流接收数据后写入指定字节数组中,从指定偏移量开始
void close()                            关闭输入流并释放任何与流相关的系统资源
void reset()                            复位在mark方法最后一次调用的位置
void mark(int readlimit)                其实就是给输入流在读取到某个字节时候打个标记,让reset方法能够回到这个标记的位置
long skip(long x)                        跳过并抛弃x个字节
boolean markSupported()                    用于测试输入流是否支持mark和reset方法

例子

package com.dylan.io;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException; /**
* @author laoxu
* @create 2018-01-01
**/
public class BufferedInputStreamExample {
public static void main(String[] args) {
try {
FileInputStream fin = new FileInputStream("D:\\testout.txt");
BufferedInputStream bin = new BufferedInputStream(fin);
int i;
while ((i = bin.read()) != -1) {
//如果是中文,此方法不支持
System.out.print((char)i);
}
} catch (IOException e) {
e.printStackTrace();
} }
}

输出:Hello java.io!

关于mark和reset方法例子

package com.dylan.io;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream; /**
* @author laoxu
* @create 2018-01-01
**/
public class BufferedInputStreamMarkReset {
public static void main(String[] args) throws Exception { InputStream iStream = null;
BufferedInputStream bis = null; try { // read from file c:/test.txt to input stream
iStream = new FileInputStream("D:/testmark.txt"); // input stream converted to buffered input stream
bis = new BufferedInputStream(iStream); // read and print characters one by one
System.out.println("Char : " + (char) bis.read());
System.out.println("Char : " + (char) bis.read());
System.out.println("Char : " + (char) bis.read()); // mark is set on the input stream
bis.mark(0);
System.out.println("Char : " + (char) bis.read());
System.out.println("reset() invoked"); // reset is called
bis.reset(); // read and print characters
System.out.println("char : " + (char) bis.read());
System.out.println("char : " + (char) bis.read()); } catch (Exception e) {
e.printStackTrace();
} finally { // releases any system resources associated with the stream
if (iStream != null)
iStream.close();
if (bis != null)
bis.close();
}
}
}

输出:

Char : A
Char : B
Char : C
Char : D
reset() invoked
char : D
char : E

下一章

Java I/O 教程(七) DataOutputStream和DataInputStream

Java I/O 教程(六) BufferedInputStream 类的更多相关文章

  1. 《深入理解java虚拟机》第六章 类文件结构

    第六章 类文件结构   6.2 无关性的基石 各种不同平台的虚拟机与所有的平台都统一使用的程序存储格式--字节码(ByteCode)是构成平台无关性的基石.java虚拟机不和包括java在内的任何语言 ...

  2. Java入门篇(六)——类和对象

    写到这里终于写到了入门篇的最后一个知识点了.类和对象是Java中经常被提到的两个词汇,实际上可以将类看作对象的载体,它定义了对象所具有的功能.Java是面向对象的语言,因此掌握类与对象是学习Java语 ...

  3. java Vamei快速教程19 嵌套类

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 到现在为止,我们都是在Java文件中直接定义类.这样的类出现在包(package) ...

  4. java Vamei快速教程13 String类

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 之前的Java基础系列中讨论了Java最核心的概念,特别是面向对象的基础.在Jav ...

  5. 转:Java NIO系列教程(六) File Channel

    Java NIO中的FileChannel是一个连接到文件的通道.可以通过文件通道读写文件. FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下. 打开FileChannel 在使用F ...

  6. “全栈2019”Java第三十六章:类

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  7. Java基础教程——Random随机数类

    Random类 java.util.Random类用于产生随机数.需要导入包: import java.util.Random; 方法 解释 Random() 创建一个Random类对象 Random ...

  8. 20145218 《Java程序设计》第六周学习总结

    20145218 <Java程序设计>第六周学习总结 教材学习内容总结 第十章 输入/输出 10.1 InputStream与OutputStream 10.1.1 串流设计的概念 Jav ...

  9. 《Java程序设计》第六周学习总结

    20145224 <Java程序设计>第六周学习总结 教材学习内容总结 第十章输入和输出 10.1.1 ·若要将数据从来源中取出,可以使用输入串流:若要将数据写入目的地,可以使用输出串流. ...

  10. java处理高并发高负载类网站的优化方法

    java处理高并发高负载类网站中数据库的设计方法(java教程,java处理大量数据,java高负载数据) 一:高并发高负载类网站关注点之数据库 没错,首先是数据库,这是大多数应用所面临的首个SPOF ...

随机推荐

  1. 面试官:小伙子来说一说Java中final关键字,以及它和finally、finalize()有什么区别?

    写在开头 面试官:"小伙子,用过final关键字吗?" 我:"必须用过呀" 面试官:"好,那来说一说你对这个关键字的理解吧,再说一说它与finally ...

  2. [转帖]tiup cluster reload

    https://docs.pingcap.com/zh/tidb/stable/tiup-component-cluster-reload 4 Contributors 在修改集群配置之后,需要通过  ...

  3. [转帖]火狐URL默认打开为HTTPS,切换成http形式

    火狐在当前及未来版本默认URL采用HTTPS进行链接,但个人习惯,某些网站不是https,改http在响应超时状态也会切成https,将默认为http. edge,chrome 依然还是http为主要 ...

  4. [转帖]011 Linux 打包与解压 tar

    https://my.oschina.net/u/3113381/blog/5429977 01 压缩.打包命令有哪些? Linux 上有着各种压缩.打包的工具:tar.gzip.zip.7z,而 t ...

  5. [转帖]深度解读:传奇的Alpha处理器

    https://jishuin.proginn.com/p/763bfbd2cf85 来源:科技新报(台) 长期关心处理器技术发展者,这20年来,很难不每隔一段时间就会偶尔听到「这技术受Alpha影响 ...

  6. Harbor简单搭建以及异常排查的过程与思路

    Harbor简单搭建以及异常排查的过程与思路 前言 我发现我总是能够遇到别人遇不到的问题. 本来搭建十分钟就可以搭建完成 结果我硬生生的搭建了四十分钟. 为了保证下次不再浪费时间. 这里加单总结一下遇 ...

  7. Nginx 大并发 调优设置

    为了性能测试,放弃部分功能,保证绝对性能. 注意可能不能用于生产环境. 下面开始简单讲解. 1. worker_processes 工作线程数. 发现不用太多 一定不能多于操作系统的CPU核数. 2. ...

  8. 袋鼠云数栈产品中 AI+ 实现原理剖析

    生产力工具 + AI 是不可逆转的趋势,慢慢的大模型能力通过 AI Agent 落地的工程化能力也开始趋于成熟.作为大数据产品的数栈也必然是需要借助 AI 能力提升产品竞争力. 去年 12 月,我们在 ...

  9. CDP技术系列(三):百万级QPS的人群命中服务接口性能优化指南

    一.背景介绍 CDP系统提供了强大的标签和群体的构建能力,面对海量数据的标签和群体,我们采用了Bitmap+ClickHouse的存储与计算方案.详细内容可以参考之前文章. 有了群体之后,它们被广泛的 ...

  10. node借助jsonwebtoken生成token以及验证token是否过期

    生成token使用 jsonwebtoken 插件 我当时使用的版本"jsonwebtoken": "^9.0.0", cnpm i jsonwebtoken ...