黑马程序员技术交流社区
标题:
Java IO体系架构
[打印本页]
作者:
chenhaiwei
时间:
2019-10-16 14:18
标题:
Java IO体系架构
1.流的概念与分类
1.1.概念
流(Stream),输入或输出管道中一串连续不断的有序数据。平常我们说的输入流与输出流指的就是输入流管道和输出流管道。与输入流管道相连的盛方数据的媒介就是流的源头,用于提供输入流管道抽取的流;与输出流管道相连的就是流的目的地,就是接收输出流管道中流的媒介,这些媒介可以是内存、磁盘、网络等。
1.2.分类
1.2.1.按流方向分类
从流的方向上可分为两类(在java中是站在程序角度来区分流的方向,将数据读取到程序中就是输入流;反之,将程序中的数据写出去就是输出流):
- 输入流: 从数据源中将数据读取到程序中的流。
- 输出流:程序将数据写入到目的地的流。
1.2.2.按流的数据类型分类
字节流: 以8位的字节形式来读写的流。他们的标志是名称以Stream结尾。InputStream与OutputStream分别是所有字节输入流与字节输出流的抽象父类。
字符流: 以字符形式来读写的流。它们的标志是名称以Reader或者Writer结尾。并且Reader和Writer分别是所有字符输入流与字符输出流的抽象父类。
2.1.字节输入流
InputStream :字节输入流、是所有字节输入流的父类、为所有字节输入流提供一个标准、和基本的与读取字节有关的方法及简单的实现
FileInputStream :文件字节输入流、以字节的形式将文件中数据读取到程序中、进行下一步操作;
FilterInputStream :过滤器字节输入流、仅仅是重写InputStream方法、为字节输入处理流提供标准:
BufferedInputStream :缓冲字节输入流、装饰类、用于装饰节点类型的字节输入流、为其提供缓冲功能、减少访问次数、提高效率;
DataInputStream :数据字节输入流、装饰类、装饰字节节点输入流、一般与DataOutputStream结合使用、用于读取DataOutputStream写入到目的地中的java基础类型的数据;
PushbackInputStream:在JAVA IO中所有的数据都是采用顺序的读取方式,即对于一个输入流来讲都是采用从头到尾的顺序读取的,如果在输入流中某个不需要的内容被读取进来,则只能通过程序将这些不需要的内容处理掉,为了解决这样的处理问题,在JAVA中提供了一种回退输入流PushbackInputStream可以把读取进来的某些数据重新回退到输入流的缓冲区之中;
ObjectInputStream :对象字节输入流、与ObjectOutputStream结合使用、用于将使用ObjectOutputStream写入目的地的java对象(一般是javabean)读取到程序中、进行下一步操作;
PipedInputStream :管道字节输入流、必须与PipedOutputStream(管道字节输出流)结合使用、用于线程之间的通信;
ByteArrayInputStream :字节数组输入流、用于读取其内置缓存字节数组中的字节。内存缓存字节数组中数据的来源是在构建ByteArrayInputStream时传入的字节数组;
StringBufferedInputStream :已过时;
SequenceInputStream:表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止
2.2.字节输出流
OutputStream:字节输出流、本身是一个抽象类、与InputStream作用一样、为所有字节输出流提供一个标准、定义了一些基本写入字节的方法与简单实现:
FileOutputStream :文件字节输出流、将字节写入指定的文件中;
FilterOutputStream :过滤字节输出流、仅仅重写了父类OutputStream的方法、是字节输出处理流的父类:
BufferedOutputStream : 缓冲字节输出流、装饰类、为低级字节输出流添加缓冲功能、提高效率、减少访问次数;
DataOutputStream : 数据字节输出流、装饰类。用于装饰节点输出流、功能是将java基础类型以一种与系统无关的方式写入到目的地中、可用DataInputStream读取;
PrintStream :字节打印流、装饰类、这是一个功能很强的流、对低级字节输出流进行装饰、提供打印各种数据类型的功能、打印的目的地不仅仅是控制台、可以是文件、内存、网络等、同时还可以指定自动flush功能;
ObjectOutputStream :对象字节输出流、用于将java的对象(一般是javabean)写入输出流管道中、存储到某介质中、可使用ObjectInputStream读取被其写入的对象;
PipedoutputStream : 管道字节输出流、在上边介绍过了、必须与PipedInputStream结合使用、用于线程之间的通信;
ByteArrayOutputStream:字节数组输出流、用于将字节写入到其本身所带的一个内置缓存字节数组中、可将其内置缓存字节数组中的字节转化成字符串到程序中、也可以将它写入到另一个字节输出流中;
2.3.字符输入流
Reader、意义与InputStream相同、为所有字符输入流提供一个标准、只有基本的读取方法的定义和简单的实现:
BufferedReader :缓冲字符输入流。装饰类、为低级字符输入流提供缓冲功能、提高效率。并且这里不再继承FilterReader、而是直接继承Reader;
InputStreamReader :字节转换流、将字节流转换成字符流、不仅仅可以将低级字节流输入流转换成字符输入流、还可以将高级字节输入流转换成字符输入流、可以指定字节转成字符时使用的编码、所有具有指定编码或者编码集的字符输入流内部都是调用了此流来转换底层流;
FileReader :文件字符输入流、以字符的形式读取文件中的内容。当文件内容是字节时则可能会有问题;
PipedReader :管道字符输入流:必须与PipedWriter结合使用、用于线程之间的通信;
CharArrayReader :字符数组输入流、将其内置字符缓存数组中的数据(通过构造方法传入)读取到程序中。内置字符缓存数组中数据的来源是在构造CharArrayReader时传入的字符数组;
FileReader :文件字符输入流、以字符的形式读取文件中的内容
2.4.字符输出流
Writer :字符输出流、是所有字符输出流的父类。与OutputStream意义一样、提供一个标准、一些基本写入的方法和简单的实现;
BufferedWriter : 缓存字符输出流、用于装饰低级字符输出流、为其提供缓冲功能、提高效率;
OutputStreamWriter :字节输出流转换成字符输出流、用于将字节输出流转化成字符输出流。可以使用指定编码转化。为提高效率、通常使用BufferedWriter对其包装;
FileWriter :文件字符输出流、继承OutputStreamWriter、用于将字符写入到指定文件中;
PrintWriter :字符打印流、同样很强大、可以将各种数据以字符的形式打印到指定目的地中、本身也是个装饰流。但是flush与PrintStream有区别;
PipedWriter : 管道字符输出流、必须与PipedReader结合使用、用于线程之间的通信;
CharArrayWriter : 字符输出流、用于将字符写入其内置缓存字符数组中。可以将写入的字符缓存数组转换成字符串或者写入其他字符输出流中;
c98708e4bbd795d9f1c6ef8533660a04_SouthEast.png
(373.15 KB, 下载次数: 55)
下载附件
2019-10-16 14:16 上传
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2