java IO流分类

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

学习任何一种基本类库都要先掌握基本结构,然后在基本结构之上再去看基本的实现类

一、基本结构的具体分类

1、以流读取数据的基本单位来分

分为两种(支持两种类型的基本数据):原始数据和Unicode字符

java内存中存的字符都是Unicode编码的,因此存在字符编码的转换问题,不管磁盘中编码是什么格式的,只要以字符为单位读的之后,转到程序中都是Unicode字符。反过来流去写磁盘的时候,内存中这些字符都是Unicode编码的,写到磁盘中去的时候,要看磁盘文件是什么编码的,会有一个Unicode字符和其它编码字符的转换过程。

2、根据这两种数据类型,java流中分为两大类

字节流和字符流

3、4中基本类是InputStream、OutputStream、Reader、Writer


InputStream

以字节为单位进行操作

1、InputStream是一个抽象类,还没有实例化,是不能直接用的

2、子类

FileInputStream:对文件进行读取的字节输入流,基本单位是字节(1个字节是8位)  等等

3、基本操作

int read()throws IOException
//没有任何形参
//一次可以读取一个字节,因为一个自己是8位的,所以返回类型是整形的
//这个方法抛出的异常是非RuntimeException,所以说,这个方法一调用,代码中就要进行相应的处理
int read(byte[] buffer)throws IOException
//byte数组有多大,一次就能读多少字节
int read(byte[] buffer,int offset,int length)throws IOException
//可以指定偏移量和每次读取的长度
void close()throws IOException
//一般流里面都会有,流用完都需要关闭

OutputStream

以字节为单位进行操作

1、OutputStream是一个抽象类,还没有实例化,是不能直接用的

2、基本方法

int write(int b)throws IOException
//每次写一个数据回去
int write(byte[] b)throws IOException
//每次写一个byte[]长的数据回去
void flush()throws IOException
//每次不是每次都往文件中写字节,而是有一个缓冲区,先将数据写到缓冲区中
//清空缓存,将缓存的数据写到文件中
//close()的时候会自动调用flush()

3、 输出流写字节的时候,不是直接往文件中写,而是有一个缓冲区,将数据写到缓冲区中,flush将缓存中的数据写到文件中去,close在关闭流的时候,会自动调用flush。但是,如果读写过程比较长的话,因为最后才close,所以,写到一定程度的时候,可以先flush一下,


Reader

以字符为单位进行操作

1、以字符为单位进行读取,以字符为单位进行操作

2、返回的是字符


Writer

以字符为单位进行操作


二、分类

1、节点流:FileInputStream、FileOutputStream、FileReader、FileWriter都可以从特定的读取或者写入数据,直接从数据源进行某些操作

2、处理流:不能直接从数据源读数据,而是从流/处理流中读数据。


三、JAVA体系中常用流分类

猜你喜欢

转载自blog.csdn.net/fighting123678/article/details/84206515