数据流(二)

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);   
//用缓冲字节流实现文件读写