JavaIO流

IO流分为六种概念:输入流、输出流、字节流、字符流、节点流和处理流。
可以方便地实现数据的输入/输出操作。
不同的输入/输出源(键盘、文件、网络连接等)抽象表述 为“流”(stream)。

一、 流的分类

  1. 输入流:只能从中读取数据,而不能向其写入数据。由InputStream和 Reader作为基类。
  2. 输出流:只能向其写入数据,而不能从中读取数据。由OutputStream和Writer作为基类。
  3. 字节流:操作的数据单元是8位的字节,由InputStream和OutputStream作为基类。
  4. 字符流:操作的数据单元是16位的字符,由 Reader和 Writer作为基类。
  5. 节点流:可以从向一个特定的IO设备(如磁盘、网络)读/写数据的流。也被称为低级流。
  6. 处理流:用于对一个已存在的流进行连接或封装,通过封装后的流来实现数据读/写功能。也称为高级流。

二、 抽象基类

Java的IO流共涉及40多个类,都是从InputStream(字节输入流)、Reader(字符输入流)、OutputStream(字节输出流)、Writer(字符输出流)4个抽象基类派生的。

IO流的类图表:
分类字节输入流字节输出流字符输入流字符输出流
抽象基类InputStreamOutputStreamReaderWriter
访问文件FilelnputStreamFileOutputStreamFileReaderFileWriter
访问数组ByteArrayInputStreamByteArrayOutputStreamCharArrayReaderCharArrayWriter
访问管道PipedlnputStreamPipedOutputStreamPipedReaderPipedWriter
访问字符串StringReaderStringWriter
缓冲流BufferedInputStreamBufferedOutputStreamBufferedReaderBufferesWriter
转换流InputStreamReaderOutputStreamWriter
对象流ObjectInputStreamObjectOutputStream
抽象基类FilterInputStreamFilterOutputStreamFilterReaderFilterWriter
打印流PrintStreamPrintWriter
推回输入流PushbackInputStreamPushbackReader
特殊流DataInputStreamDataOutputStream
IO流的类图:

在这里插入图片描述

三、输入流

只能从中读取数据,而不能向其写入数据。

InputStream和Reader是所有输入流的基类。

InputStream和Reader的方法基本一致,只是InputStream读取的是字节,使用的参数是byte数组(byte[ ]),而Reader读取的是字符,使用的参数是char数组(char[ ])。

InputStream和Reader都是抽象类,本身不能创建实例,但它们分别有一个用于读取文件的输入流:FileInputStream和FileReader,它们都是节点流需要直接和指定文件关联。

1. InputStream的方法

int available():返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节数。
void close():关闭此输入流并释放与该流关联的所有系统资源。
void mark(int readlimit):在此输入流中标记当前的位置。
boolean markSupported():测试此输入流是否支持mark和reset方法。
abstract read():从输入流中读取数据的下一个字节。
int read(byte[] b):从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中。
int read(byte[] b,int off,int len):将输入流中最多len个数据字节读入byte数组。
void reset():将此流重新定位到最后一次对此输入流调用mark方法时的位置。
long skip(long n):跳过和丢弃此输入流中数据的n个字节。
例:
在这里插入图片描述

2. Reader的方法

abstract void close():关闭该流并释放与之关联的所有资源。
void mark(int readAheadLimit):标记流中的当前位置。
boolean markSupported():判断此流是否支持 mark() 操作。
int read():读取单个字符。
int read(char[] cbuf):将字符读入数组。
bstract int read(char[] cbuf,int off,int len):将字符读入数组的某一部分。
int read(CharBuffer target):试图将字符读入指定的字符缓冲区。
boolean ready():判断是否准备读取此流。
void reset():重置该流。
long skip(long n):跳过字符。
例:
在这里插入图片描述

四、输出流

只能向其写入数据,而不能从中读取数据。

OutputStream和Write是所有输出流的基类。

1. OutputStream的方法

void close():关闭此输出流并释放与此流有关的所有系统资源。
void flush():刷新此输出流并强制写出所有缓冲的输出字节。
void write(byte[] b):将b.length个字节从指定的byte数组写入此输出流。
void write(byte[] b,int off,int len):将指定byte数组中从偏移量off开始的len个字节写入此输出流。
abstract void write(int b):将指定的字节写入此输出流。
例:
在这里插入图片描述

2. Writer的方法

Writer append(char c):将指定字符添加到此writer。
Writer append(CharSequence csq):将指定字符序列添加到此 writer。
Writer append(CharSequence csq,int start,int end):将指定字符序列的子序列添加到此writer.Appendable。
abstract void close():关闭此流,但要先刷新它。
abstract void flush():刷新该流的缓冲。
void write(char[] cbuf):写入字符数组。
abstract void write(char[] cbuf,int off,int len):写入字符数组的某一部分。
void write(int c):写入单个字符。
void write(String str):写入字符串。
void write(String str,int off,int len):写入字符串的某一部分。
例:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新鑫S

你的鼓励将是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值