Java I/O 教程(六) BufferedInputStream 类
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 类的更多相关文章
- 《深入理解java虚拟机》第六章 类文件结构
第六章 类文件结构 6.2 无关性的基石 各种不同平台的虚拟机与所有的平台都统一使用的程序存储格式--字节码(ByteCode)是构成平台无关性的基石.java虚拟机不和包括java在内的任何语言 ...
- Java入门篇(六)——类和对象
写到这里终于写到了入门篇的最后一个知识点了.类和对象是Java中经常被提到的两个词汇,实际上可以将类看作对象的载体,它定义了对象所具有的功能.Java是面向对象的语言,因此掌握类与对象是学习Java语 ...
- java Vamei快速教程19 嵌套类
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 到现在为止,我们都是在Java文件中直接定义类.这样的类出现在包(package) ...
- java Vamei快速教程13 String类
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 之前的Java基础系列中讨论了Java最核心的概念,特别是面向对象的基础.在Jav ...
- 转:Java NIO系列教程(六) File Channel
Java NIO中的FileChannel是一个连接到文件的通道.可以通过文件通道读写文件. FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下. 打开FileChannel 在使用F ...
- “全栈2019”Java第三十六章:类
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Java基础教程——Random随机数类
Random类 java.util.Random类用于产生随机数.需要导入包: import java.util.Random; 方法 解释 Random() 创建一个Random类对象 Random ...
- 20145218 《Java程序设计》第六周学习总结
20145218 <Java程序设计>第六周学习总结 教材学习内容总结 第十章 输入/输出 10.1 InputStream与OutputStream 10.1.1 串流设计的概念 Jav ...
- 《Java程序设计》第六周学习总结
20145224 <Java程序设计>第六周学习总结 教材学习内容总结 第十章输入和输出 10.1.1 ·若要将数据从来源中取出,可以使用输入串流:若要将数据写入目的地,可以使用输出串流. ...
- java处理高并发高负载类网站的优化方法
java处理高并发高负载类网站中数据库的设计方法(java教程,java处理大量数据,java高负载数据) 一:高并发高负载类网站关注点之数据库 没错,首先是数据库,这是大多数应用所面临的首个SPOF ...
随机推荐
- 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.12.1)
一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...
- Mygin实现上下文
本篇是Mygin的第三篇 目的 将路由独立出来,方便后续扩展修改 上下文Context,对http.ResponseWriter和http.Request进行封装,实现对JSON.HTML等的支持 路 ...
- 【面试题精讲】JVM中有哪些垃圾收集器
有时博客内容会有变动,首发博客是最新的,其他博客地址可能未同步,请认准https://blog.zysicyj.top 首发博客地址 系列文章地址 在Java虚拟机(JVM)中,有以下几种常见的垃圾收 ...
- [转帖]可能是最完整的 TCP 连接健康指标工具 ss 的说明
https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/ 写在前面 TCP 连接健康的重要性 如何查看 TCP 连接健康 容器化 ...
- [转帖]【存储测试】cosbench存储性能测试工具
一.前言 参考资料: https://blog.csdn.net/QTM_Gitee/article/details/100067724 https://github.com/intel-cloud/ ...
- [转帖]Kafka—配置SASL/PLAIN认证客户端及常用操作命令
介绍 SASL/PLAIN 是一种简单的 username/password安全认证机制,本文主要总结服务端开启该认证后,命令行客户端进行配置的操作流程. 配置 增加jaas.properties ...
- Linux 内核参数
/proc/sys/net/ipv4: ip_local_port_range:定义了TCP或UDP对目标发起连接所选择的本地端口范围(除ip_local_reserved_ports之外),其定义受 ...
- It is currently in use by another Gradle instance
FAILURE: Build failed with an exception. * What went wrong: Could not create service of type TaskHis ...
- 【APP 逆向百例】Frida 初体验,root 检测与加密字符串定位
声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容.敏感网址.数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 本文章未经许 ...
- 从零开始配置 vim(9)——初始配置
虽然本系列文章叫做从0开始配置vim,似乎我们从一开始就要写vimrc配置文件,但是我们并没有这么做.我们先经过几篇文章了解了下面的几个内容 如何设置vim属性,从而改变vim的特征 配置快捷键,以提 ...