Java入門第六篇:I/O流
阿新 • • 發佈:2018-04-22
進行 spa out tao 基本數據 速度 序列 自帶 緩存對象 [java中的IO流]
分類:
1. 根據流的方向:輸入流和輸出流
根據讀取文字的大小:字節流和字符流;
字節流按字節讀取,讀取中文時會產生亂碼,字符流按字符讀取,通常用於讀取中文。
根據讀取的方式:節點流和緩存流
[BufferedInputStream和....Output..]
新建一個對象,傳入一個文件,這個對象作為緩存流。可以減少文件的讀寫次數,提高讀寫速度。
程序最後,刷新緩存流:bos.fluse();
緩存區一定要關!
bis.close();
bos.close();(會自動刷新緩存流)
緩存流的作用:
將文件對象作為參數傳入緩存對象。
這種寫法,我們稱之為IO鏈,IO關閉時只需要關閉最外層流,內層流將自動關閉。
[DataInputStream類]
用二進制對文件進行讀寫操作,(可讀寫二進制文件、基本fis讀寫可能出現亂碼)。
與基本流相比,可以直接讀寫java中的基本數據類型。
(使用DataOutputStream寫入的文件,只能使用DataInputStream讀 )
方法.readUTF();可讀取中文。
[ObjectInputStream]
1.與基本流相同,可以直接使用read和writer讀寫;
2.與DataInputStream相同,可以對java基本數據類型進行直接讀寫。
方法.redaInt(); readDouble();等
3.使用可以使用readObject()和writeObject()對對象進行讀寫。
讀寫對象時,一定要對要讀寫的對象類實現序列化。
[對象的序列化和反序列化]
概念:
對象的序列化:將程序中的對象,持久化的保存在文件中的過程。
對象的反序列化:將文件中保存的對象,重新讀取到程序中的過程。
序列化必須對象所屬 的類必須實現serializable接口
當一個實體類,實現可序化接口後,可以it安家一個序列化版本號ID
private static final long serialVersionUID = 1L;
添加以後,可以用ID表示序列化和反序列化操作的對象,是同一個對象。
否則序列化之後,如果實體類屬性有刪減,在進行序列化時 系統默認不是同一類,會造成錯誤。
[字符流]
1.在處理數據單元時,以一個字符作為單位;
而字節流,以一個字節作為單位。
2.字符的基類:
Reader和Writer 是抽象類
FileReader和FileWriter是直接繼承字抽象類的兩個基本字符流。
3.FileReader和FileWriter只能使用系統使用的編碼格式;
無法指定編碼,如果文件格式與系統默認格式不一樣,那使用這兩個方法讀寫將造成中文亂碼。
[InputStreamReader和OutputStreamWriter]
1.將字節流轉換為字符流,同時支持自定義讀寫的編碼格式;
文件傳入時自帶緩存功能。
2.常見的編碼格式。
ASCII : 美國標準消息碼;
ISO8859-1 : 歐洲碼;
GB2312 : 國標碼;
GBK : 國標擴展碼;
ANSI編碼,可以分為很多種;
簡體中文:
GB2312;
GBk;
繁體中文:
BIG-5;
Unicode編碼:國際標準碼,兼容絕大部分國家的編碼格式。
可以分為UTF-6,UTF-8,UTF-16。
Java入門第六篇:I/O流