字节流是最基本的数据流,主要用来按照字节处理二进制数据,所有的InputStream 和OutputStream的子类都是属于字节流的。
InputStream和OutputStream是抽象类。
这样的话就理解了为什么是这样建立的InputStream对象的了:
InputStream input = new FileInputStream(“f:example\test.txt”);
实际上做了一个向上转型 产生了一个执行FileInputStream(InputStream的一个子类)的对象
这两个类是表示字节输入流和字节输出流的所有类的父类,子类包括FileInputStream FilterInputStream 等。
InputStream 和 OutputStream 各自都只有一个不带参数的构造方法
InputStream方法:
简要介绍方法如下:
int available() 表示不受阻塞的可以从此文件输入流中读取的字节数
void close() 表示关闭输入流并释放与该流关联的所有系统资源。
abstract int read() 从输入流中读取下一个数据字节
int read(byte [] b) 该方法从输入流当中读取一定数量的字节并将其存储在缓冲区数组b中。
int read(byte[] b , int off , int len) 将输入流当中len个数据字节读入字节数组。
看的出来这个只有int read() 这个方法是一个抽象方法,没有提供具体的定义,而其他方法都是有定义的,子类只是需要继承没有必要全部亲自实现的。
子类是可以调用父类的其他方法的,这是废话
OutputStream 相关常用方法:
void close() 该方法关闭此输出流并释放与此流相关的所有系统资源。
void flush() 该方法刷新此输出流并强制写出
void write(byte[] b) 该方法将b.length 个字节从指定字节数组写入此输出流
void write(byte[] b , int off , int len) 该方法将指定字节数组从偏移量off开始 的len个字节写入此输出流
abstract write(int b) 该方法将指定的字节写入此输出流。
因为InputStream和OutputStream 是抽象类,所以不能创建其实例来进行调用。直接子类或者间接子类都具有InputStream和OutputStream的非private方法,
直接子类包括 FileInputStream 和FileOutputStream FilterInputStream和FilterOutputStream等;
间接子类包括:BufferedInputStream和BufferedOutputStream 以及DataInputStream和DataOutputStream等。