【J2SE快速进阶】——IO流的四个基本抽象类InputStream、OutputStream、Reader、Writer

简介: 上文中对java.io包中的四个抽象类及其关系简单了解了一下,这里进一步对它们及其子类进一步总结一下。 在上篇博客末尾,贴出了Java中的整个IO家族,之后小编又重修改了一下,在之前的基础上,标识出了节点流与处理流(绿色为节点流,黄色为处理流)。

       上文中对java.io包中的四个抽象类及其关系简单了解了一下,这里进一步对它们及其子类进一步总结一下。


       在上篇博客末尾,贴出了Java中的整个IO家族,之后小编又重修改了一下,在之前的基础上,标识出了节点流与处理流(绿色为节点流,黄色为处理流)。


79.jpg


        这里我们分别来说一下这四个抽象类。


        细心的你也许会发现,大部分输入流和输出流都是成对的,有输入就有输出,一一对应。


        InputStream


        输入字节流InputStream的作用是标志那些从不同数据起源产生输入的类。

        基本方法有:


                int read()方法:读取一个字节,以整数的形式返回(0~255),如果返回-1,则已经到了输入流的末尾;


                int read(byte[ ] b)方法:读取一系列字节并存储到一个数组b中,返回实际读取的字节数,如果读取前已经到了输入流的末尾,则返回-1;


                int read(byte[ ] b,int off,int len)方法:读取至多len个字节并存储到一个字节数组b中,返回实际读取的字节数,如果读取前已经到了输入流的末尾,则返回-1;


                void close()方法:关闭此输入流并释放与该流有关的系统资源。


                long skip(long n)方法:跳过n个字节不读,直接跳到n个字节之后,返回实际跳过的字节数。


        需要定义 InputStream 子类的应用程序必须总是提供返回下一个输入字节的方法。





       OutputStream


       输出字节流OutputStream接受输出字节并将这些字节发送到某个接收器。


       基本方法有:


                void write(int b)方法:将指定的字节写入此输出流。


                void write(byte[ ] b)方法:将b.length个字节从指定的byte数组写入此输出流。


                void write(byte[ ] b,int off,int len)方法:将指定byte数组中从偏移量off开始的len个字节写入此输出流。


                void close()方法:关闭此输出流并释放与此流有关的系统资源


                void flush()方法:刷新此输出流并强制写出所有缓冲的输出字节。



       需要定义OutputStream 子类的应用程序必须始终提供至少一种可写入一个输出字节的方法。


       Reader


      输入字符流Reader定义了以字符为单位读取数据的方法。


      基本方法有:


                int read()方法:读取一个字符并以整数的形式返回(0~255),如果已经到了输入流的末尾,则返回-1.


                int read(char[ ] cbuf)方法:读取一系列字符并存储到一个数组b中,返回实际读取的字符数,如果读取前已经到了输入流的末尾,则返回-1;


                int read(char[ ] cbuf,int off,int len)方法:读取至多len个字符并存储到一个数组cbuf中,返回实际读取的字节数,如果读取前已经到了输入流的末尾,则返回-1;



                void close()方法:关闭此输入流并释放与该流有关的系统资源。


                long skip(long n)方法:跳过n个字符不读,直接跳到n个字节之后,返回实际跳过的字符数。


      子类必须实现的方法只有 read(char[], int, int) 和 close()。但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能。



       Writer


      输出字符流Reader定义了以字符为单位写数据的方法。


      基本方法有:



                void write(int c)方法:向输出流中写入一个字符c。


                void write(char[ ] cbuf)方法:向输出流中写入字符数组cbuf。


                void write(String str)方法:向输出流中写入字符串str。


                void write(char[ ] cbuf,int off,int len)方法:将指定字符串数组cbuf中从偏移量off开始的len个字符写入此输出流。


                void write(String str,int off,int len)方法:将指定字符串str中从偏移量off开始的len个字符写入此输出流。


      子类必须实现的方法仅有 write(char[], int, int)、flush() 和 close()。但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能。


       虽然这四个抽象类都定义了相应的方法,但在进行数据的读写时,真正用到的都是其子类,子类通常会重新定义相关方法。后面实践时再举例说明一些基本、常用的类。



相关文章
|
8月前
|
存储 Java 开发者
java进阶-第8章-IO流(二)
缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,从而提高读写的效率。
30 0
|
14天前
|
存储 编译器 C语言
C语言进阶⑱(文件上篇)(动态通讯录写入文件)(文件指针+IO流+八个输入输出函数)fopen+fclose(下)
C语言进阶⑱(文件上篇)(动态通讯录写入文件)(文件指针+IO流+八个输入输出函数)fopen+fclose
23 0
|
14天前
|
C语言
C语言进阶⑱(文件上篇)(动态通讯录写入文件)(文件指针+IO流+八个输入输出函数)fopen+fclose(中)
C语言进阶⑱(文件上篇)(动态通讯录写入文件)(文件指针+IO流+八个输入输出函数)fopen+fclose
22 0
|
14天前
|
存储 数据库 C语言
C语言进阶⑱(文件上篇)(动态通讯录写入文件)(文件指针+IO流+八个输入输出函数)fopen+fclose(上)
C语言进阶⑱(文件上篇)(动态通讯录写入文件)(文件指针+IO流+八个输入输出函数)fopen+fclose
21 0
|
19天前
|
Java 大数据 数据库
【Spring底层原理高级进阶】Spring Batch清洗和转换数据,一键处理繁杂数据!Spring Batch是如何实现IO流优化的?本文详解!
【Spring底层原理高级进阶】Spring Batch清洗和转换数据,一键处理繁杂数据!Spring Batch是如何实现IO流优化的?本文详解!
|
19天前
IO流:字符输入流Reader的超详细用法及底层原理
IO流:字符输入流Reader的超详细用法及底层原理
|
6月前
|
Java
【文件IO】 File类的用法和 InputStream OutputStream 的用法
【文件IO】 File类的用法和 InputStream OutputStream 的用法
|
7月前
|
存储 Java
[java进阶]——高级IO流家族,序列化流、打印流、压缩流、转换流
[java进阶]——高级IO流家族,序列化流、打印流、压缩流、转换流
|
7月前
|
存储 移动开发 Java
[java进阶]——IO流基本字节流和字符流,字符流中的缓冲流,递归实现多级文件拷贝
[java进阶]——IO流基本字节流和字符流,字符流中的缓冲流,递归实现多级文件拷贝
|
8月前
|
存储 Java 索引
java进阶-第8章-IO流(一)
因为内置缓冲区的原因,如果不关闭输出流,无法写出字符到文件中。但是关闭的流对象,是无法继续写出数据的。如果我们既想写出数据,又想继续使用流,就需要flush 方法了。
24 0