数据流(二)
inputStream类和OutputStream类
InputStream类是所有面向字节的输入流的父类,为java.io包中的抽象类,类的定义如下:
Public abstractclass inputStream extends Object
InputStream类中声明了字节的输入流输入的多个方法,包括读取数据、标记位置、获取数据量、关闭数据流等。
Read():从流中读入数据
Skip():跳过流中若干字节数
Available():返回流中可用的字节数
Reset():返回标记过的位置
markSuport():是否支持标记和复位操作
close():关闭流。
OutputStream类为所有面向字节的输出流的父类,为Java包中的抽象类。类的定义如下:
Public abstract class OutputStream extendsObject
Write(int b):将一个整数输出到流中。
Write(byte b[]):将数组中的数据输出到流中。
Write(byte b[],int off,int len):将数组b中从off指定的位置开始len长度的数据输出到流中。
Flush():将缓冲区强制送出。
Close():关闭流。
过滤流
抽象的InputStream和OutputStream类允许我们对字串及数字进行读写。为达到这个目的,还需要功能更多的子类。例如:DateInputStream和DataOutputStream允许我们对所有基本的java类型进行读写。
文件流类与抽象的InputStream和OutputStream类相似,这些类也只支持字节级的读写操作。换言之,只能从fin对象中读取字符和字节数组。byteb=fin.read(),他们没有提供专门的数值类型,所以DataInputStream没有办法从一个文件中获取数字。
解决方案:java给流职责分工,某些流(FileInputStream)负责从文件或另一些更特殊的地方读入字节数据。而另一些流
(DataInputStream、PrintWriter)负责将字节“组装”成更有用的数据类型。必须综合运用这两种流,将其合并成所谓的"过滤流(FilteredStreams)",方法是将一个现成的流传递给另一个流的构建器。
字节缓冲流
BufferedInputStream
BufferedOutputStrem
默认情况下,流不会进行缓冲。即每读一次,都会要求操作系统提供一个字节。通过BufferedInputStream和BufferedOutputStream对流构建器进行过滤分层,实现缓冲。
1、构造函数:
BufferedInputStream(InputStream in)
BufferedInputStream(InputStream in, int size) //size:缓冲区的大小
2、代码演示:
BufferedInputStream bis=new BufferedInputStream(System.in);
BufferedInputStream bis=new BufferedInputStream(System.in ,100);
//用缓冲字节流实现文件读写