【输入/输出流的分类】
1、java.io包里定义了多个流类型(类或抽象类)来实现输入/输出功能,并且从不同角度对其进行了分类。
1)、按数据流方向的不同可以分为输入流和输出流。
2)、按处理数据的单位的不同可以分为字节流和字符流。
3)、按照功能的不同可以分为节点流和处理流。
2、jdk所提供的所有流类型位于包java.io内,分别继承自以下四种抽象流类型。
类型 | 字节流 | 字符流 |
输入流 | InputStream | Reader |
输出流 | OutputStream | Writer |
凡是以Stream结尾的全是字节流!!!
(关于输入流或输出流,是站在程序的角度而言。)
3、节点流和处理流
1)、节点流为可以从一个特定的数据源(节点)读取数据(如:文件、内存)。
2)、处理流是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。
【输入流和输出流】
一、InputStream的基本方法
继承自InputStream的流都是用于向程序输入数据,且数据的单位为字节(8bit)
int read() throws IOException //读取一个字节并以整数的形式返回(0~255);如返回-1,表示已到输入流的末尾。
int read(byte[] buffer) throws IOException//读取一系列字节并存储到一个数组buffer,返回实际读取的字节数;如果读取前已到输入流的末尾,则返回-1.
int read(byte[] buffer, int offset, int length) throws IOException//从文件中的offset位置读取长度为length的字节并存储到buffer中
int close() throws IOException//关闭流释放内存资源。
int skip(long n) throws IOException//跳过n个字节不读。
二、OutputStream的基本方法
继承自OutputStream的流是用于程序的输出数据,且数据单位是字节(8bit)。
void write(int b) throws IOException
void write(byte[] b) throws IOException
void write(byte[] b, int off, int len) throws IOException
void close() throws IOException
void flush() throws IOException//将输出中缓冲的数据全部写出到目的地
三、Reader
继承自Reader的流都是用于程序输入数据,且数据单位是字符(16 bit)。
四、Writer
继承自Writer的流都是用于程序中输出数据,且数据的单位是字符(16 bit).
【处理流】
一、缓冲流
缓冲流要“套接”在相应的节点流之上,对读写的数据提供缓冲的功能。
如:BufferedInputStream、BufferedOutputStream。
二、转换流
用于字节数据到字符数据的转换。
如:InputStreamReader需和InputStream“套接”,OutputStreamWriter需和OutputStream”套接“。
三、数据流
提供了可以存取与机器无关的Java原始类型数据(如:int、double等)的方法。
如:DataInputStream和DataOutputStream分别继承自InputStream和OutputStream属于处理流,需分别“套接”在InputStream和OutputStream类型的节点流上。
四、Print流
1、PrintWriter与PrintStream都属于输出流,分别针对于字符和字节。
2、PrintWriter与PrintStream提供了重载的print。
3、Println方法用于多种类型的输出。
4、PrintWriter与PrintStream的输出操作不会抛出异常,用户通过检测错误状态获取错误信息。
5、PrintWriter与PrintStream有自动flush功能。
五、Object流
直接将Object写入或读出
1、接口Serializable
起标记作用,用于识别对象是否可以序列化。此接口内成员属性及方法。
将Object类型的对象转化为字节流。
2、关键字transient
修饰成员变量,被它修饰的成员变量序列化时不予考虑。
3、接口Externalizable
控制对象的序列化过程。