《java核心技术》读书笔记

《java核心技术 高级特性》第一章 流和文件

  正如FileInputStream没有任何读入数据类型方法一样,DataInputStream也没有任何从文件中获取数据的方法。

  java使用了一种灵巧的机制来分离这两种职责。某些流(例如FileInputStream和由URL类的OpenStream方法返回的输入流)可以从文件和其他更外部的位置上获取字节,而其他的流(例如DataInputStream和PrintWriter)可以将字节组装到更有用的数据类型中。java程序员必须对二者进行组合。例如,为了从文件中读入数字,首先需要创建一个FileInputStream,然后将其传递给DataInputStream的构造器:

FileInputStream fin = new FileInputStream( "employee.dat" );

DataInputStream din = new DataInputStream( fin );

double s = din.readDouble();

FilterInputStream和FilterOutputSteam类。这些文件的子类用于添加原生字节流。

你可以通过嵌套过滤器来添加多重功能。例如,流在默认情况下是不被缓冲区缓存的,也就是说,每个对read的调用都会请求操作系统再分发一个字节。相比之下,请求一个数据块并将其置于缓冲区中会显得更加高效。如果我们想使用缓冲机制,以及用于文件的数据输入方法,那么就需要使用下面这种想当恐怖的构造器序列。

DataInputStream din = new DataInputStream(

new BufferedInputStream(

new FileInputStream( "employee.data" ) ) );

注意,我们把DataInputStream置于构造器链的最后,这是因为我们希望使用DataInputStream的方法,并且希望他们能够和使用带缓冲机制的read方法。

有时当多个流链接在一起时,你需要跟踪各个中介流(intermediate stream)。例如,当读入输入时,你经常需要刘玲下一个字节,以了解他是否是你想要的值。java提供了用于此目的的PushbackInputStream:

PushbackInputStream pbin = new PushbackInputStream(

new BufferedInputStream(

new FileInputStream( "employee.dat" ) ) );

现在你可以预读下一个字节:

int b = pbin.read();

并且在它并非你所期望的值时将其抛回。


这样使得DataInputStream可以和所有FilterInputStream继承的类匹配,提供了更方便的功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值