流的概念和分类

「这是我参与11月更文挑战的第15天,活动详情查看:2021最后一次更文挑战

首先简单了解一下,流的概念:Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。

输入流

Java程序可以打开一个从数据源(如磁盘文件、网上资源等)到程序的流,从 这个流中读取数据,称为输入流 只能从输入流读取数据,而不能向其中写入数据

输出流

Java程序可以打开到外界某个目的地的流,把程序中的数据写到这个流中,称为输出流 程序只能向输出流写数据,而不能从输出流中读取数据

流的分类

按照流的方向分类

输入流、输出流

 每一个输入流几乎都能找到一个输出流和它相对应

 例如 • FileInputStream对应FileOutputStream • FileReader对应FileWriter

按照流的基本数据单位大小分类

 字节流、字符流

 字节流中的数据以字节为单位进行读写

• 以InputStream和OutputStream为基础类,其它字节流的类都直接或间接继承自这两个类

 字符流以字符(2个字节)为单位进行读写

• 以Reader和Writer为基础类,其它字符流的类都直接或间接继承自这两个类

关于字节流和字符流的区别:

1)字节流在读取的时候,读到一个字节就返回一个字节。字符流使用了字节流读到一个或者多个字节(中文对应的字节是两个,UTF-8码表中是三个)时,先去查指定的编码表,将查到的字符返回。

2)字节流可以处理所有类型数据,如图片,mp3等。

3)字节输入流都是以InputStream结尾,字节输出流都是以OutputStream结尾。在InputStream或者OutputStream前面代表这个流的作用。

字符流输入流都是以Reader结尾,字符流输出流都是以Writer结尾,相同与字节流前面也是代表这个流的作用。

实际上字节流在操作的时候本身是不会用到缓冲区的,是文件本身直接操作的,但是字符流在操作的时候下后是会用到缓冲区的,是通过缓冲区来操作文件的。

猜你喜欢

转载自juejin.im/post/7031021023671615495