java.io包中定义了多个流类型(类或抽象类)来实现输入/输出功能;能够从不一样的角度对其进行分类:java
按数据流的方向不一样能够分给输入流和输出流。spa
按处理数据单位不一样能够分为字节流和字符流。对象
按照功能不一样能够分为节点流和处理流。blog
|
字节流ip |
字符流内存 |
输入流ci |
InputStreamit |
Readerio |
输出流table |
OutputStream |
Write |
节点流为能够从一个特定的数据源(节点)读写数据(如:文件,内存)
处理流是“链接”在已存在的流(节点流或处理流)之上,经过对数据的处理为程序提供更为强大的读写功能。
类型 |
字符流 |
字节流 |
File(文件) |
FileReader FileWriter |
FileInputStream FileOutputStream |
Memory Array |
CharArrayReader CharArrayWriter |
ByteArrayInputStream ByteArrayOutputStream |
Memory String |
StringReader StringWriter |
|
Pipe(管道) |
PipedReader PipedWriter |
PipedInputStream PipedOutputStream |
处理类型 |
字符流 |
字节流 |
Buffering |
BufferedReader BufferedWriter |
BufferedInputStream BufferedOutputStream |
Filtering |
FilterReader FilterWriter |
FilterInputStream FilterOutputStream |
Converting between bytes and character |
InputStreamReader OutputStreamWriter |
|
Object Serialization |
|
ObjectInputStream ObjectOutputStream |
Data coversion |
|
DataInputStream DataOutputStrearm |
Counting |
LineNumberReadeer |
LineNumberInputStream |
Peeking ahead |
PushbackReader |
PushbackInputStream |
Printing |
PrintWriter |
PrintStream |
serializable 序列化,将一个对象,转换为字节流保存到硬盘。
package Test; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutput; import java.io.ObjectOutputStream; import java.io.Serializable; public class TestObjectIO { public static void main(String[] args) throws Exception { T t = new T(); t.k = 30; FileOutputStream fos = new FileOutputStream("F:/TestObjectIO.txt"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(t); oos.flush(); oos.close(); FileInputStream fis = new FileInputStream("F:/TestObjectIO.txt"); ObjectInputStream ois = new ObjectInputStream(fis); T a = (T)ois.readObject(); System.out.println(a.i +" " + a.j + " " + a.d + " " + a.k); fos.close(); fis.close(); ois.close(); } } class T implements Serializable { int i = 10; int j = 20; double d = 3.2; //transient 在序列化的时候,不予考虑,也及读出来以后为0 transient int k = 15; }