08_1_IO

08_1_IO

1. 输入/输出流的分类

java.io包中定义了多个流类型(类或抽象类)来实现输入/输出功能;可以从不同的角度对其进行分类:

按数据流的方向不同可以分给输入流和输出流。

按处理数据单位不同可以分为字节流和字符流。

按照功能不同可以分为节点流和处理流。

字节流

字符流

输入流

InputStream

Reader

输出流

OutputStream

Write

2. 节点流和处理流

节点流为可以从一个特定的数据源(节点)读写数据(如:文件,内存)

处理流是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。

3. 节点流类型

类型

字符流

字节流

File(文件)

FileReader FileWriter

FileInputStream FileOutputStream

Memory Array

CharArrayReader

CharArrayWriter

ByteArrayInputStream

ByteArrayOutputStream

Memory String

StringReader

StringWriter

Pipe(管道)

PipedReader

PipedWriter

PipedInputStream

PipedOutputStream

4. 处理流类型

处理类型

字符流

字节流

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

5. Object

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;
}

猜你喜欢

转载自www.cnblogs.com/flyback/p/8949267.html