Java流式输入/输出原理:
1.在java程序中,对于数据的输入输出操作以“流”(stream)方式进行;J2SDK提供了各种的“流”类,用以获取不同种类的数据;程序中通过标准的方法输入输出数据。
文件—————>00101.....<—————程序
输入/输出流的分类:
一:java.io包中定义了多个流类型来实现输入/输出功能。
1.按数据流的方向不同可以分为输入和输出流;
2.按处理数据单位不同可以分为字节流和字符流;
3.按照功能不同可以分为节点流和处理流。
二:J2SDK所提供的所有流类型位于java.io内部分别继承自一下四种抽象流类型
字节流 | 字符流 | |
输入流 | InputStream | Reader |
输出流 | OutputStream | Writer |
1.节点流和处理流:节点流为可以从一个特定的数据源(节点)读入数据;处理流是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。
三:节点流类型
类型 | 字符流 | 字节流 |
File(文件) | FileReader FileWriter | FileInputStream FileOutputStream |
Memory Array | CharArrayReader CharArrayWriter | ByteArrayInputStream ByteArrayOutputStream |
Memory String | StringReader StringWriter | - |
Pipe(管道) | PipeReader PipeWriter | PipeInputStream PipeOutputStream |
四:处理流类型
处理类型 | 字符流 | 字节流 |
Buffering | BufferedReader BufferedWriter | BufferedInputStream BufferedOutputStream |
Filtering | FilterReader FilterWriter | FilterInputStream FilterOutputStream |
Converting between bytes and character | InputStreamReader OutputStreamWriter | |
Object Serialization | ObjectInputStream ObjectOutputStream | |
Data conversion | DataInputStream DataOutputStream | |
Counting | LineNumberReader | LineNumberInputStream |
Peeking ahead | PusbackReader | PusbackInputStream |
Printing | PrintWriter | PrintStream |
五:缓冲流:缓冲流要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,同时增加了一些新的方法。缓冲流常用的构造方法:
BufferedReader(Reader in);
BufferedWriter(Writer out);
BufferedInputStream(InputStream in);
BufferedOutputStream(OutputStream out).
1.BufferedReader提供了readerLine方法用于读取一行字符串(以\r或\n分隔);
2.BufferedWriter提供了newLine用于写入一个行分隔符;
3.对于输出的缓冲流,写出的数据会先在内存中缓存,使用flush方法将会使内存中的数据立刻写出。
六:转换流
1.InputStreamReader和OutputStreamWriter用于字节数据到字符数据之间的转换;
2.InputStreamReader需要和InputStream"套接“;
3.OutputStreamWriter需要和OutputStream"套接”;
4.转换流在构造时可以指定其编码集合。
七:数据流
1.DataInputStream和DataOutputStream分别继承自InputStream和OutputStream,它属于处理流,需要分别"套接“在InputStream和OutputStream类型的节点流上;
2.DataInputStream和DataOutputStream提供了可以存取与机器无关的java原始类型数据;
3.DataInputStream和DataOutputStream的构造方法为:
DataInputStream(InputStream in);
DataOutputStream(OutputStream out)
八:Print流:
1.PrintWriter和PrintSteam都属于输出流,分别针对于字符和字节;
2.PrintWriter和PrintSteam提供了重载的print
3.Prinln方法用于多种数据类型的输出;
4.PrintWriter和PrintSteam的输出操作不会抛出异常,用户通过检测错误状态获取错误信息;
5.PrintWriter和PrintSteam有自动flush功能。