Java基础知识-IO流(八)

本文介绍了流的多种分类方式,包括按流向、传输单位及功能的不同分类。详细讲解了字节流与字符流的基类及其常用方法,同时列举了一些常用的流实现类,如RandomAccessFile,用于实现随机读写等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

流的分类
1.按流的流向分类

输入流和输出流
输入流是从其他地方(硬盘、外部存储、网络等)往内存中读取数据。
输出流是从内存往其他地方(硬盘、外部存储、网络等)写入数据。
输入和输出流的方向是相对于内存而言的

2.按流的传输单位分类

字节流和字符流
字节流是基于8位的字节作为操作的数据单元。
字符流是基于16位的字符作为操作的数据单元。
字符流可以看成特殊的字节流

3.按功能分

节点流和处理流
直接从数据源读/写数据的流,称为节点流。
对一个已经存在的流进行连接封装,通过封装后的流来实现数据读/写功能,即为处理流。

流的基类

1.InputStream
InputStream简介
InputSteam是字节输入流的抽象基类,本身不能创建实例来进行输入,
但是有丰富的子类去实现不同的功能,它类似于一个模板,所以它的方法将是所有输入流都可使用的方法

InputStream常用方法
a.从输入流中读取单个字节,返回所读取的字节数据,转化成为int类型

int read(); 

b.从输入流中最多读取字节数组b的长度个字节数据,并且保存在b中,返回值表示本次读取实际读取的字节数

int read(byte[] b); 

c.从输入流中最多读取len个字节的数据,并存储在字节数组b中,并不是从数组的开头放入的,而是从off位置开始,返回实际读取的字节数

int read(byte[] b, int off, int len); 

d.关闭此输入流并释放与此流关联的所有系统资源

void close(); 

e.跳过和丢弃此输入流中数据的 n 个字节,返回实际跳过的字节数

long skip(long n); 
Reader

Reader简介
Reader是字符输入流的抽象基类,和InputStream的用法非常相似,
唯一的区别在于对字节的操作变成了对字符的操作
Reader常用方法
a.从输入流中读取单个字符,返回所读取的字符数据,转化为int类型

int read(); 

b.从输入流中最多读取字符数组c的长度个字符数据,并且保存在c中,返回值表示本次读取实际读取的字符数

int read(char[] c); 

c.从输入流中最多读取len个字符的数据,并存储在字符数组c中,
并不是从数组的开头放入的,而是从off位置开始,返回实际读取的字符数

int read(char[] c, int off, int len); 

e.关闭此输入流并释放与此流管理的所有系统资源

void close(); 

f.跳过输入流中的n个字符,返回实际跳过的字符数

long skip(long n); 
OutputStream

OutputStream简介
OutputStream是所有字节输出流的抽象父类,和InputStream是对应的,它也有自己的一系列方法

OutputStream常用方法
a.将指定的字节输出到输出流中

void write(int c); 

b.将字节数组中的数据输出到指定的输出流中

void write(byte[] b); 

c. 将字节数组中的off位置开始,长度为len的字节输出到输出流中

void write(byte[] b, int off, int len);
Writer

Writer简介
Writer是字符输出流,和Reader是对应的,基本用法和OutputStream类似,但是因为字符流直接以字符作为操作单位,所以Writer相对于字节输出流还多了几个方法

Writer常用方法
a.将指定的字符输出到输出流中

void write(int c); 

b.将字符数组中的数据输出到指定的输出流

void write(char[] c); 

c.将字符数组中从off开始,长度为len的字符数据输出到输出流中

void write(char[] c, int off, int len); 

d.将str字符串里包含的字符输出到指定的输出流中

void write(String str); 

e. 将str字符串里从off位置开始,长度为len的字符输出到输出流中

void write(String str, int off, int len);
常用的流的实现类

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

RandomAccessFile类
主要功能是完成随机读写功能,可以读取指定位置的内容
构造方法:

public RandomAccessFile (File file,String mode) 
public RandomAccessFile (String name,String mode) 

第二个参数
文件的打开模式(mode):
“r” 以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException。
“rw” 打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。
常用方法:

void seek(long pos)设置文件指针偏移量,在该位置准备开始读写。
long getFilePointer()获取此文件中的当前偏移量
long length()返回此文件的长度。 
int skipBytes(int n)尝试跳过输入的 n 个字节并丢弃跳过的字节.返回实际跳过的字节数. 

注意:
1.当一个文件可以用记事本打开并且正常显示,我们就可以用字符流来处理,也可以直接用字节流处理,其实字符流就是特殊的字节流
2.使用IO流切记需要关闭流,释放资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值