IO流
IO流【輸入輸出流】:
按照流向劃分:
輸入流:外部資料 -> java程式
輸出流:java程式 -> 外部資料
按照資料型別劃分【根據使用記事本開啟是否能夠看懂來決定】:
位元組流【萬能流】:
位元組輸出流:
OutputStream(抽象類)
- FileOutputStream(實現子類)【普通的位元組輸出流】
構造方法:
FileOutputStream(File file)
FileOutputStream(String name)
- BufferedOnputStream【位元組緩衝輸出流】:
構造方法:
BufferedOnputStream(FileOutputStream fos)
位元組輸入流:
InputStream(抽象類)
FileInputStream【普通的位元組輸入流】:
構造方法:
FileInputStream(File file)
FileInputStream(String name)
成員方法:
public int read()
public int read(byte[] b)
BufferedInputStream【位元組緩衝輸入流】:
構造方法
BufferedInputStream(FileIutputStream fis)
字元流:
字元輸入流:
Reader【抽象類】
- InputStreamReader【具體實現子類】
構造方法:
IutputStreamWriter(FileIutputStream fos)
- FileReader【繼承自InputStreamReader】
構造方法:
FileReader(String name)等同於IutputStreamReader(new FileIutputStream(String name))
字元輸出流:
Writer【抽象類】
- OutputStreamWriter【具體實現子類】
構造方法:
OutputStreamWriter(FileOutputStream fos)
- FileWriter【繼承自OutputStreamWriter】
構造方法:
FileWriter(String name)等同於OutputStreamWriter(new FileOutputStream(String name))
讀取
// public int read() 一次讀取一個字元
// System.out.print((char) isr.read());
// System.out.print((char) isr.read());
// int i = 0;
// while ((i = isr.read()) != -1) {
// System.out.print((char) i);
// }
//public int read(char[] cbuf) 一次讀取一個字元陣列
char[] chars = new char[1024];
int length = 0;
while ((length= isr.read(chars))!=-1){
String s = new String(chars, 0, length);
System.out.print(s);
}
序列化及反序列化
序列化:將物件轉化成資料流一樣在網路中傳輸
物件輸出流:ObjectOutputStream
只有實現了Serializable介面的類的物件才可以進行序列化
反序列化:將網路中資料流還原成一個物件
物件輸入流:ObjectInputStream
我們正常寫一個物件之後,讀取一個物件都是沒有問題的。
但是當我們修改了原來的類的時候,再次讀取儲存的物件就報錯了
java.io.InvalidClassException:
com.shujia.day16.Teacher;
local class incompatible:
stream class desc serialVersionUID = -4530247781226673719,
local class serialVersionUID = -4180828856871739850
若不想讓某一個成員序列化的話,只需要在該成員前面加上transient關鍵字
public class ObjectOutputStreamDemo1 {
public static void main(String[] args) throws Exception{
// write();
read();
}
public static void read() throws Exception{
//ObjectInputStream(InputStream in)
//建立從指定的InputStream讀取的ObjectInputStream
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("java/src/com/shujia/day16/obj.txt"));
Object o = ois.readObject(); //Object o = new Teacher("小虎", 18)
Teacher t1 = (Teacher)o;
System.out.println(t1);
ois.close();
}
public static void write() throws Exception{
Teacher t1 = new Teacher("小虎", 18);
//建立ObjectOutputStream物件
//ObjectOutputStream(OutputStream out)
//建立一個寫入指定的OutputStream的ObjectOutputStream。
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("java/src/com/shujia/day16/obj.txt"));
oos.writeObject(t1);
oos.flush();
//釋放資源
oos.close();
}
}