package com.BufferedInputStreamUse;

 import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException; /*
我们清楚读取文件数据使用缓冲数组读取效率更高,sun也知道使用缓冲数组读取效率更高,那么
这时候sun给我们提供了一个------缓冲输入字节流对象,让我们可以更高效率读取文件。 输入字节流体系:
----| InputStream 输入字节流的基类。 抽象
----------| FileInputStream 读取文件数据的输入字节流
----------| BufferedInputStream 缓冲输入字节流 缓冲输入字节流的出现主要是为了提高读取文件数据的效率。
其实该类内部只不过是维护了一个8kb的字节数组而已。 注意: 凡是缓冲流都不具备读写文件的能力。 使用BufferedInputStream的步骤 :
1. 找到目标文件。
2. 建立数据 的输入通道
3. 建立缓冲 输入字节流流
4. 关闭资源
*/
/**
* BufferedInputStream 缓冲输入字节流
* @author Administrator
*
*/ //读取文件的时候我们都是使用缓冲数组读取。效率会更加高
class Reader{
public static void readTest(){
//找到目標文件
File file = new File("D://aa.txt");
//建立数据之间的通信
BufferedInputStream bufferedInputStream = null;
try {
FileInputStream fileInputStream = new FileInputStream(file);
bufferedInputStream = new BufferedInputStream(fileInputStream);
int length = 0;
/* //这种方法无法解释汉子
while((length = bufferedInputStream.read())!=-1){
System.out.print((char)length);
}*/
byte[] bs = new byte[1024*8];
//疑问二:BufferedInputStream出现 的目的是了提高读取文件的效率,但是BufferedInputStream的read方法每次读取一个字节的数据
//而FileInputStreram每次也是读取一个字节的数据,那么BufferedInputStream效率高从何而来?
while((length = bufferedInputStream.read(bs))!=-1){
String str = new String(bs,0,length);
System.out.println(str);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e){
e.printStackTrace(); }finally{
if(bufferedInputStream != null){
try {
//调用BufferedInputStream的close方法实际上关闭的是FileinputStream.
bufferedInputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} }
} public class BufferedInputStreamTest { public static void main(String[] args) {
// TODO Auto-generated method stub Reader reader = new Reader();
reader.readTest();
} }

最新文章

  1. Spring 代理模式及AOP基本术语
  2. 8-04流程控制语句BEGIN ..END
  3. reason: '*** Collection <__NSCFArray: 0x7ffa43528f70> was mutated while being enumerated.'
  4. QT中的SOCKET编程(QT-2.3.2)
  5. ks使用lvm分区,ks启动
  6. HDU 4424 Conquer a New Region
  7. hdu 2870(dp求最大子矩阵)
  8. Linq 两个集合模糊查询
  9. opencv基础知识-videowriter
  10. 【转】http响应状态代码含义及跳转的类型
  11. poj 1106 Transmitters (枚举+叉积运用)
  12. 评论PK投票功能的手机版
  13. JavaScript最全的10种跨域共享的方法
  14. JS中实现A*算法寻路
  15. RocketMQ源码 — 三、 Producer消息发送过程
  16. 浅析Numpy.genfromtxt及File I/O讲解
  17. ubuntu + 远程桌面连接命令 + rdesktop + 连接windows或者ubuntu远程桌面
  18. 在Go语言中基础的Redis操作
  19. python实现杨辉三角
  20. 转:mvc 当中 [ValidateAntiForgeryToken] 的作用

热门文章

  1. 阿里云linux服务器打开端口号
  2. 新版u-boot移植到s3c2440开发板(一)--建立单板
  3. 实际项目开发过程中常用C语言函数的9大用法
  4. go基础1:Hello world与变量声明
  5. Hibernate第四天——查询方式
  6. 20145207《Java程序设计》实验四( Android程序设计)实验报告
  7. java.lang.IllegalStateException: ApplicationEventMulticaster not initialized
  8. CF 258 D. Little Elephant and Broken Sorting
  9. [SHOI2008]仙人掌图
  10. windows10如何将python2和python3添加到环境变量中