IO

【输入/输出流的分类】

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

控制对象的序列化过程。










你可能感兴趣的:(IO)