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

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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/43916877

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

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

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

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

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()。但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能。

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【SSH快速进阶】——Hibernate一对一映射(one-to-one)——唯一外键关联

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

    DannyHoo
  • 【MyBatis框架点滴】——MyBatis输入映射

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

    DannyHoo
  • 【EJB学习笔记】——有状态的会话Bean和无状态的会话Bean

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

    DannyHoo
  • 类的进化史

      类无疑是C++最重要的概念之一,是从C的面向过程到C++面向对象的重要转变的基础,下面我们就来谈谈C++中的类是怎样演变的。   先来看看C中的结构体(st...

    弗兰克的猫
  • N(奇数)阶幻方-java实现代码

    看完最强大脑,有一期是说N阶幻立方的,作为一个程序员,我的第一反应时我可以用程序实现,在此公布N(奇数)阶幻方的java实现代码:

    lzugis
  • c++ MFC图像处理CImage类常用操作代码

    原文地址:https://www.cnblogs.com/DOMLX/p/9598974.html

    徐飞机
  • 奇数魔方阵(奇数幻方)

    mathor
  • 算法(六)二叉堆获取最小的k个数

    如果你有一个文件,里面包含20万行的整数,如何获取前k个最小的数?首先可以想到两个思路:

    一只羊
  • 搜索(DFS BFS)专题练习

    题意:很简单的问题,就是一个地图,上面S是入口,然后E是出口。#代表陷阱不能走,问我们是否能够走出迷宫。

    用户7727433
  • 面试算法题

    树形 dp。一般两遍 dfs 就能解决。 第一遍 dfs 用 son[i] 记录每个节点多少个子孙,用 dis[i] 记录 i 点到其所有子孙的距离之和。 s...

    饶文津

扫码关注云+社区

领取腾讯云代金券