IO流

1、Java IO 流
io是java中实现输入输出的基础,它可以很方便的完成数据的输入输出操作,Java把不同的输入输出抽象为流,通过流的方式允许Java程序使用相同的方式来访问不同的输入、输出。

2、流的分类
输入流、输出流
A、输入流:只能从中读取数据,而不能向里面写数据
B、 输出流:只能向里面写数据,而不能读数据
可以这样理解,数据从内存到硬盘,通常认为是输出流,即写操作;相反,从硬盘到内存,通常认为是输入流,即读操作;这里的输入、输出是从内存的角度划分的。

Java的输入流主要有InputStream和Reader作为基类,而输出流则主要由OutputStream和Writer作为基类;

字节流和字符流
字节流和字符流区别非常简单,它们的用法几乎一样。区别在于字节流和字符流所操作的数据单元不同:字节流操作的最小单元数据是8位字节,而字符流作为最小数据单元是16为字节。
字节流主要由InputStream、OutputStream作为基类,而字符流则主要由Reader和Writer作为基类完成。

节点流和处理流
按照流的角色分,可以分为节点流和处理流。
可以从、向一个特定的IO设备,读写数据流,称为节点流,节点流常常也被常务低级流(Low Level Stream)
处理流则用于对一个已经存在的流进行连接封装,通过封装后来实现数据的读写功能。处理流称为高级流;
当用处理流的进行输入、输出时,程序并不会直接连接到实际数据源,没有和实际的输入、输出节点连接。使用处理流一个明显的好处是:只要使用相同的处理流,程序就可以采用相同的输入、输出代码来访问不同数据源,随着处理流锁包装节点流的改变,程序实际所访问的数据源也相应发生改变。

处理流的功能主要体现在两个方面:
性能提高:主要以增加缓冲方式来提高输入、输出的效率
操作的便捷: 处理流可能提供了系列便捷的方法来一次性输入、输出大批量的内容,而不是输入、输出一个或多个单位数据

处理流可以“嫁接”在任何已经存在的流的基础上,这就允许Java应用程序采用相同的代码、透明的方式来访问不同的输入、输出设备输入流。

字节输入流InputStream和字符输入流Reader

InputStream和Reader是所有输入流的基类,他们都是2个抽象类,本身并不能创建实例来执行输入,但他们有输入流的模版,所以它们的方法是所有的输入流和输出流可以用的方法。

在InputStream里常用的方法:
int read(): 从输入流中读取单个自己
int read(byte[] b): 从输入流中读取最多b.length个字节,将读取的字节存在数组b中,返回实际读取的字节数
int read(byte[] b, int off, int len): 从输入流中读取最多len个字节数据,并将其存储在数字b中,放入b数组中时,并不是从数组起点开始,而是从off位置开始,返回实际读取字节数。

在Reader里经常使用的方法:
int read(): 从输入流中读取单个字符
int read(char[] c): 从输入流读取最多c.length个字符数据,并将其存储在字符数组c中,返回实际读取的字符
int read(char[] c, int off, int len): 从输入流中读取最多len个字符的数据,将读取的数据放到字符数组c中保存,从数组的off开始读取;
InputStream、Reader还支持如下几个方法移动指针:
void mark(int readAheadLimit): 在记录指针当前位置第一个标记(mark)
boolean markSupported(): 判断此输入流是否支持mark()操作,即是否支持记录标记
void reset():将此流的记录的指针重新定位到上一次记录的标记的位置
long skip(long n):记录指针向前移动n个字节、字符
OutputStream字节输出流和Writer字符输出流

具有以下方法:
void write(int c): 指定的字节、字符输出到输出流中
void write(byte[]/char[] buf): 将字节数组/字符数组中的数据传输到指定输出流中
void write(byte[]/char[] buf, int off,int len):将指定数组中的数据输出到指定输出流中

字符输出流还有以下方法:
void write(String s):将指定字符串输出到指定输出流中
void write(String s, int off, int len):将字节数组、字符数组中从off位置开始,长度为len的字节、字符输出到输出流中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值