通过FilterInputStream从InputStream里读入数据

FilterInputStream类要完成两件全然不同的事情。其中,DataInputStream允许我们读取不同的基本类型数据以及String对象(所有方法都以“read”开头,比如readByte(),readFloat()等等)。伴随对应的DataOutputStream,我们可通过数据“流”将基本类型的数据从一个地方搬到另一个地方。这些“地方”是由表10.1总结的那些类决定的。若读取块内的数据,并自己进行解析,就不需要用到DataInputStream。但在其他许多情况下,我们一般都想用它对自己读入的数据进行自动格式化。

剩下的类用于修改InputStream的内部行为方式:是否进行缓冲,是否跟踪自己读入的数据行,以及是否能够推回一个字符等等。后两种类看起来特别象提供对构建一个编译器的支持(换言之,添加它们为了支持Java编译器的构建),所以在常规编程中一般都用不着它们。
也许几乎每次都要缓冲自己的输入,无论连接的是哪个IO设备。所以IO库最明智的做法就是将未缓冲输入作为一种特殊情况处理,同时将缓冲输入接纳为标准做法。

表10.3 FilterInputStream的类型


Class
 


Function
 


Constructor Arguments
 


How to use it
 


Data-InputStream
 


Used in concert with DataOutputStream, so you can read primitives (int, char, long, etc.) from a stream in a portable fashion.
 


InputStream
 


Contains a full interface to allow you to read primitive types.
 


Buffered-InputStream
 


Use this to prevent a physical read every time you want more data. You’re saying “Use a buffer.”
 


InputStream, with optional buffer size.
 


This doesn’t provide an interface per se, just a requirement that a buffer be used. Attach an interface object.
 


LineNumber-InputStream
 


Keeps track of line numbers in the input stream; you can call getLineNumber() and setLineNumber(int).
 


InputStream
 


This just adds line numbering, so you’ll probably attach an interface object.
 


Pushback-InputStream
 


Has a one byte push-back buffer so that you can push back the last character read.
 


InputStream
 


Generally used in the scanner for a compiler and probably included because the Java compiler needed it. You probably won’t use this.
 

类 功能 构建器参数/如何使用

DataInputStream 与DataOutputStream联合使用,使自己能以机动方式读取一个流中的基本数据类型(int,char,long等等) InputStream/包含了一个完整的接口,以便读取基本数据类型
BufferedInputStream 避免每次想要更多数据时都进行物理性的读取,告诉它“请先在缓冲区里找” InputStream,没有可选的缓冲区大小/本身并不能提供一个接口,只是发出使用缓冲区的要求。要求同一个接口对象连接到一起
LineNumberInputStream 跟踪输入流中的行号;可调用getLineNumber()以及setLineNumber(int) 只是添加对数据行编号的能力,所以可能需要同一个真正的接口对象连接
PushbackInputStream 有一个字节的后推缓冲区,以便后推读入的上一个字符 InputStream/通常由编译器在扫描器中使用,因为Java编译器需要它。一般不在自己的代码中使用.

时间: 2024-11-03 10:05:38

通过FilterInputStream从InputStream里读入数据的相关文章

java io学习(九) FilterInputStream

FilterInputStream 介绍 FilterInputStream 的作用是用来"封装其它的输入流,并为它们提供额外的功能".它的常用的子类有BufferedInputStream和DataInputStream. BufferedInputStream的作用就是为"输入流提供缓冲功能,以及mark()和reset()功能". DataInputStream 是用来装饰其它输入流,它"允许应用程序以与机器无关方式从底层输入流中读取基本 Java

Java中FilterInputStream和FilterOutputStream的用法详解_java

FilterInputStream FilterInputStream 的作用是用来"封装其它的输入流,并为它们提供额外的功能".它的常用的子类有BufferedInputStream和DataInputStream. BufferedInputStream的作用就是为"输入流提供缓冲功能,以及mark()和reset()功能". DataInputStream 是用来装饰其它输入流,它"允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类

求助!读取JAR包里的文件不完整

问题描述 用InputStream里面的read(byte[])方法,读JAR包里的一个TXT文件,只能读3分之一...求解啊~~~那个TXT文件不在JAR包里的时候能够正常读完....怨念... 解决方案 解决方案二:丁一下暂时不会解决方案三:后来包装成BufferedReader,用readLine(),可以读完全部内容,但是内容又出现了乱码我TXT文件格式为UTF-8,while((str=br.readLine())!=null){s[x]=newString(ss.getBytes()

java io系列10之 FilterInputStream

FilterInputStream 介绍 FilterInputStream 的作用是用来"封装其它的输入流,并为它们提供额外的功能".它的常用的子类有BufferedInputStream和DataInputStream. BufferedInputStream的作用就是为"输入流提供缓冲功能,以及mark()和reset()功能". DataInputStream 是用来装饰其它输入流,它"允许应用程序以与机器无关方式从底层输入流中读取基本 Java

TIJ阅读笔记(第十二章)

笔记 12: Java I/O 系统对编程语言的设计者来说,创建一套好的输入输出(I/O)系统,是一项难度极高的任务.File 类在介绍直接从流里读写数据的类之前,我们先介绍一下处理文件和目录的类. 你会认为这是一个关于文件的类,但它不是.你可以用它来表示某个文件的名字,也可以用它来表示目录里一组文件的名字.如果它表示的是一组文件,那么你还可以用list( )方法来进行查询,让它会返回String数组.由于元素数量是固定的,因此数组会比容器更好一些.如果你想要获取另一个目录的清单,再建一个Fil

《设计模式精解》读后感

  模式一直是J2EE领域的热门话题.两年前,对刚开始自学java并且到处碰壁的我,一本在图书馆借的<java与模式>看的我云里雾里,尽管心里面觉的他讲的很有道理,可对于没有实际项目经验的我,真正的理解和应用还很远很远.转眼工作快一年多了了,也做了几个不大不小的项目,尽管还只是个代码工人水准的,但是对于模式的兴趣越发浓厚,于是从书堆里找出来买了好久的GOF<设计模式>.这本书是圣经级别了,可我对C++的了解有限(虽然在学校里还是狠狠啃过好几本大部头,现在忘光了),而且这本圣经对初学

装饰者模式

有时候为了传承某个类的一些功能,我们可以采用继承该类来获取功能,并可以通过覆写某些方法来进行功能加强.然而若想对一批类的功能进行加强,如果仍采用继承,不仅在代码上重复,并且不利于扩展.如下所示:  ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 public interface Component {       public void  fun(); }   public class ConcreteAComponent i

IO重要理解及笔记

第一部分:将网路图片显示到ImageView控件 1 利用图片的路径,得到图片的字节数组 public static byte [] getImage(String path) throws Exception{ URL imageUrl=new URL(path); HttpURLConnection connection=(HttpURLConnection)imageUrl.openConnection(); connection.setConnectTimeout(5000); conn

java基础知识I/O流使用详解_java

"流"概念源于UNIX中的管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备.外部文件等,它屏蔽了实际的I/O设备中处理数据的细节.   一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是Internet上的某个URL. 流的方向是重要的,根据流的方向,流可以分为两类:输入流和输出流.其实输入/输出是想对于内存来说的.实际上,流的源端和目的端可简单地看成是字节的生产者和消费者,对于输入流,可不必