轉換流、序列化流、列印流、commons-io、properties
Java中傳輸最頻繁是字元但是傳輸開始用的是位元組流<不能看出傳輸的是啥>所以又有了字元流(底層為位元組流);
IO流的分類
|- 位元組流
- 位元組輸入流 InputStream 抽象類
- FileInputStream 操作檔案的位元組輸入流
- 位元組輸出流 OuputStream抽象類
- FileOutputStream 操作檔案的位元組輸出流
|- 字元流
- 字元輸入流 Reader抽象類
- FileReader 用來操作檔案的字元輸入流(簡便的流)
- 字元輸出流 Writer抽象類
- FileWriter 用來操作檔案的字元輸出流(簡便的流)
OutputStreamWriter 是字元流通向位元組流的橋樑:可使用指定的字元編碼表,將要寫入流中的字元編碼成位元組。
它的作用的就是,將字串按照指定的編碼表轉成位元組,在使用位元組流將這些位元組寫出去。
eg<:>
//建立與檔案關聯的位元組輸出流物件
FileOutputStream fos = new FileOutputStream("c:\\cn8.txt");
//建立可以把字元轉成位元組的轉換流物件,並指定編碼
OutputStreamWriter osw = new OutputStreamWriter(fos,"utf-8");
實現過程:
其實在OutputStreamWriter流中維護自己的高效區,當我們呼叫OutputStreamWriter物件的write方法時,
會拿著字元到指定的碼錶中進行查詢,把查到的字元編碼值轉成位元組數存放到OutputStreamWriter高效區中。
然後再呼叫重新整理功能,或者關閉流,或者高效區存滿後會把高效區中的位元組資料使用位元組流寫到指定的檔案中。
InputStreamReader 是位元組流通向字元流的橋樑:它使用指定的字元編碼表讀取位元組並將其解碼為字元。
它使用的字符集可以由名稱指定或顯式給定,或者可以接受平臺預設的字符集。
eg<:>
/建立讀取檔案的位元組流物件
InputStream in = new FileInputStream("c:\\cn8.txt");
//建立轉換流物件
//InputStreamReader isr = new InputStreamReader(in);這樣建立物件,會用本地預設碼錶讀取,將會發生錯誤解碼的錯誤
InputStreamReader isr = new InputStreamReader(in,"utf-8");
注意:在讀取指定的編碼的檔案時,一定要指定編碼格式,否則就會發生解碼錯誤,而發生亂碼現象
java.io.OutputStreamWriter extends Writer 字元轉換為位元組的橋樑
* 底層:使用的還是父類的write方法 寫一個字元 一個字元陣列 一個字元陣列的一部分
*
* 構造方法
* OutputStreamWriter(OutputStream out)
//不指定格式
eg:OutputStreamWriter osw=new OutputStream(new FileOutputStream("檔案路徑!"));
* OutputStreamWriter(OutputStream out, String charsetName)
//指定格式
eg:OutputStreamWriter osw=new OutputStream(new FileOutputStream("檔案路徑!"),"檔案格式");
* 引數
* OutputStream out:位元組輸出流的超類,可以傳入任意位元組輸出流物件
* FileOutputStream
* String charsetName:指定的編碼表,編碼表不區分大小寫 但是不要亂寫
* gbk utf-8
java.io.InputStreamReader extends Reader 位元組轉字元的橋樑
* 底層:使用的還是父類read方法 讀一個字元 讀一個字元陣列
*
* 構造方法
* InputStreamReader(InputStream in)
* InputStreamReader(InputStream in,String charsetName)
* 引數
* InputStream in:位元組輸入流的超類,可以傳入任意位元組輸入流物件
* FileInputStream
* String charsetName:指定的編碼表,編碼表不區分大小寫 但是不要亂寫
* gbk utf-8
用於從流中讀取物件的操作流 ObjectInputStream 稱為 反序列化流
用於向流中寫入物件的操作流 ObjectOutputStream 稱為 序列化流
用於操作物件可以把物件寫入到流也可以從檔案中讀取物件
java.io.ObjectOutputStream extends OutputStream 序列化流
* 方法
* void writeObject(Object obj) 寫物件
* 構造方法
* ObjectOutputStream(OutputStream out)
* 引數
* OutputStream out:位元組輸出流超類 ,可以傳入其任意子類物件
* FileOutputStream
java.io.ObjectInputStream extends InputStream 反序列化流
* 方法
* Object readObject() 讀物件
* 構造方法
* ObjectInputStream(InputStream in)
* 引數
* InputStream in:位元組輸入流超類,可以傳入其任意子類物件
* FileInputStream
自定義的類裡面
(必須實現)Serializable序列化介面 實現這個介面可以序列化 不實現了就不能序列化
* 裡面沒有任何的方法 這種介面 我們稱為標記型介面
*
當一個類的物件需要被序列化時,某些屬性不需要被序列化
* 靜態內容不能序列化
static : 靜態關鍵字, 不能被序列化
* transient:瞬態關鍵字 唯一的作用 阻止序列化
指定序列號位置
private static final long serialVersionUID = 112123213213213L;
*
* java.io.InvalidClassException: com.itheima03.Person; local class incompatible:
* stream classdesc serialVersionUID = -4590593952347619816,
* local class serialVersionUID = -2922495580370653572
列印流
* 位元組列印流 PrintStream
* 構造方法public PrintStream(OutputStream out) 可以接收 字串路徑 file物件 位元組輸出流
* 字元列印流 PrintWriter
* 構造方法public PrintWriter(Writer out) 可以接收 字串路徑 file物件 位元組輸出流 字元輸出流
eg:
//建立流
//PrintWriter out = new PrintWriter(new FileWriter("printFile.txt"));
* 列印流特點
* 1.列印流只負責輸出目的端
* 2.列印流為其他流添加了功能
* 3.列印流不會丟擲IO異常
* 4.列印流可以開啟自動重新整理
* 開啟自動重新整理的前提
* 1.構造方法中接收的必須是流物件
* PrintWriter(OutputStream out, boolean autoFlush)
* PrintWriter(Writer out, boolean autoFlush)
* boolean autoFlush為true則開啟自動重新整理
* 2.必須是println printf format方法才可以開啟自動重新整理
IO流的分類
|- 位元組流
|- 位元組輸入流 InputStream 抽象類
|- FileInputStream 操作檔案的位元組輸入流
|- 位元組輸出流 OuputStream抽象類
|- FileOutputStream 操作檔案的位元組輸出流
|- 字元流
|- 字元輸入流 Reader抽象類
|- FileReader 用來操作檔案的字元輸入流(簡便的流)
|- 字元輸出流 Writer抽象類
|- FileWriter 用來操作檔案的字元輸出流(簡便的流)
OutputStream此抽象類,是表示輸出位元組流的所有類的超類。操作的資料都是位元組,定義了輸出位元組流的基本共性功能方法
OutputStream有很多子類,其中子類FileOutputStream可用來寫入資料到檔案。
FileOutputStream類,即檔案輸出流,是用於將資料寫入 File的輸出流
//可以續寫不覆蓋
FileOutputStream fos = new FileOutputStream(file, true);
InputStream此抽象類,是表示位元組輸入流的所有類的超類。
InputStream有很多子類,其中子類FileInputStream可用來讀取檔案內容。
FileInputStream 從檔案系統中的某個檔案中獲得輸入位元組
緩衝流,根據流的分類分類位元組緩衝流與字元緩衝流。
(位元組緩衝流)
寫入資料到流中,位元組緩衝輸出流 BufferedOutputStream
? 讀取流中的資料,位元組緩衝輸入流 BufferedInputStream
(字元緩衝流)
寫入資料到流中,位元組緩衝輸出流 BufferedFileWriter
? 讀取流中的資料,位元組緩衝輸入流 BufferedFileReader
繼承者 java.io.InputStream
繼承者 java.io.FilterInputStream
繼承者 java.io.BufferedInputStream
InputStream(位元組抽象類)-------------------BufferedInputStream(位元組高效)
FileInputStream(位元組普通流)
ObjectInputStream extends InputStream 反序列化流
OuputStream(位元組抽象類)---------------------FileOutputStream(位元組普通流)
-------------------FilterOutputStream
BufferedOutputStream(位元組高效)
PrintStream 位元組列印流
------------------- ObjectOutputStream序列化流
Reader(字元抽象類)------------------------BufferedFileWriter(字元高效)
------------------------FileReader(字元普通流)
------------------------InputStreamReader extends Reader 位元組轉字元的橋樑
Writer(字元抽象類)-----------------------BufferedFileWriter(字元高效)
-----------------------FileWriter(字元普通流)
------------------------字元列印流 PrintWriter 構造方法(public class PrintWriterextends Writer)
-------------------------OutputStreamWriter extends Writer 字元轉換為位元組的橋樑
Java中傳輸最頻繁是字元但是傳輸開始用的是位元組流<不能看出傳輸的是啥>所以又有了字元流(底層為位元組流);
IO流的分類
|- 位元組流
- 位元組輸入流 InputStream 抽象類
- FileInputStream 操作檔案的位元組輸入流
- 位元組輸出流 OuputStream抽象類
- FileOutputStream 操作檔案的位元組輸出流
|- 字元流
- 字元輸入流 Reader抽象類
- FileReader 用來操作檔案的字元輸入流(簡便的流)
- 字元輸出流 Writer抽象類
- FileWriter 用來操作檔案的字元輸出流(簡便的流)
OutputStreamWriter 是字元流通向位元組流的橋樑:可使用指定的字元編碼表,將要寫入流中的字元編碼成位元組。
它的作用的就是,將字串按照指定的編碼表轉成位元組,在使用位元組流將這些位元組寫出去。
eg<:>
//建立與檔案關聯的位元組輸出流物件
FileOutputStream fos = new FileOutputStream("c:\\cn8.txt");
//建立可以把字元轉成位元組的轉換流物件,並指定編碼
OutputStreamWriter osw = new OutputStreamWriter(fos,"utf-8");
實現過程:
其實在OutputStreamWriter流中維護自己的高效區,當我們呼叫OutputStreamWriter物件的write方法時,
會拿著字元到指定的碼錶中進行查詢,把查到的字元編碼值轉成位元組數存放到OutputStreamWriter高效區中。
然後再呼叫重新整理功能,或者關閉流,或者高效區存滿後會把高效區中的位元組資料使用位元組流寫到指定的檔案中。
InputStreamReader 是位元組流通向字元流的橋樑:它使用指定的字元編碼表讀取位元組並將其解碼為字元。
它使用的字符集可以由名稱指定或顯式給定,或者可以接受平臺預設的字符集。
eg<:>
/建立讀取檔案的位元組流物件
InputStream in = new FileInputStream("c:\\cn8.txt");
//建立轉換流物件
//InputStreamReader isr = new InputStreamReader(in);這樣建立物件,會用本地預設碼錶讀取,將會發生錯誤解碼的錯誤
InputStreamReader isr = new InputStreamReader(in,"utf-8");
注意:在讀取指定的編碼的檔案時,一定要指定編碼格式,否則就會發生解碼錯誤,而發生亂碼現象
java.io.OutputStreamWriter extends Writer 字元轉換為位元組的橋樑
* 底層:使用的還是父類的write方法 寫一個字元 一個字元陣列 一個字元陣列的一部分
*
* 構造方法
* OutputStreamWriter(OutputStream out)
//不指定格式
eg:OutputStreamWriter osw=new OutputStream(new FileOutputStream("檔案路徑!"));
* OutputStreamWriter(OutputStream out, String charsetName)
//指定格式
eg:OutputStreamWriter osw=new OutputStream(new FileOutputStream("檔案路徑!"),"檔案格式");
* 引數
* OutputStream out:位元組輸出流的超類,可以傳入任意位元組輸出流物件
* FileOutputStream
* String charsetName:指定的編碼表,編碼表不區分大小寫 但是不要亂寫
* gbk utf-8
java.io.InputStreamReader extends Reader 位元組轉字元的橋樑
* 底層:使用的還是父類read方法 讀一個字元 讀一個字元陣列
*
* 構造方法
* InputStreamReader(InputStream in)
* InputStreamReader(InputStream in,String charsetName)
* 引數
* InputStream in:位元組輸入流的超類,可以傳入任意位元組輸入流物件
* FileInputStream
* String charsetName:指定的編碼表,編碼表不區分大小寫 但是不要亂寫
* gbk utf-8
用於從流中讀取物件的操作流 ObjectInputStream 稱為 反序列化流
用於向流中寫入物件的操作流 ObjectOutputStream 稱為 序列化流
用於操作物件可以把物件寫入到流也可以從檔案中讀取物件
java.io.ObjectOutputStream extends OutputStream 序列化流
* 方法
* void writeObject(Object obj) 寫物件
* 構造方法
* ObjectOutputStream(OutputStream out)
* 引數
* OutputStream out:位元組輸出流超類 ,可以傳入其任意子類物件
* FileOutputStream
java.io.ObjectInputStream extends InputStream 反序列化流
* 方法
* Object readObject() 讀物件
* 構造方法
* ObjectInputStream(InputStream in)
* 引數
* InputStream in:位元組輸入流超類,可以傳入其任意子類物件
* FileInputStream
自定義的類裡面
(必須實現)Serializable序列化介面 實現這個介面可以序列化 不實現了就不能序列化
* 裡面沒有任何的方法 這種介面 我們稱為標記型介面
*
當一個類的物件需要被序列化時,某些屬性不需要被序列化
* 靜態內容不能序列化
static : 靜態關鍵字, 不能被序列化
* transient:瞬態關鍵字 唯一的作用 阻止序列化
指定序列號位置
private static final long serialVersionUID = 112123213213213L;
*
* java.io.InvalidClassException: com.itheima03.Person; local class incompatible:
* stream classdesc serialVersionUID = -4590593952347619816,
* local class serialVersionUID = -2922495580370653572
列印流
* 位元組列印流 PrintStream
* 構造方法public PrintStream(OutputStream out) 可以接收 字串路徑 file物件 位元組輸出流
* 字元列印流 PrintWriter
* 構造方法public PrintWriter(Writer out) 可以接收 字串路徑 file物件 位元組輸出流 字元輸出流
eg:
//建立流
//PrintWriter out = new PrintWriter(new FileWriter("printFile.txt"));
* 列印流特點
* 1.列印流只負責輸出目的端
* 2.列印流為其他流添加了功能
* 3.列印流不會丟擲IO異常
* 4.列印流可以開啟自動重新整理
* 開啟自動重新整理的前提
* 1.構造方法中接收的必須是流物件
* PrintWriter(OutputStream out, boolean autoFlush)
* PrintWriter(Writer out, boolean autoFlush)
* boolean autoFlush為true則開啟自動重新整理
* 2.必須是println printf format方法才可以開啟自動重新整理
IO流的分類
|- 位元組流
|- 位元組輸入流 InputStream 抽象類
|- FileInputStream 操作檔案的位元組輸入流
|- 位元組輸出流 OuputStream抽象類
|- FileOutputStream 操作檔案的位元組輸出流
|- 字元流
|- 字元輸入流 Reader抽象類
|- FileReader 用來操作檔案的字元輸入流(簡便的流)
|- 字元輸出流 Writer抽象類
|- FileWriter 用來操作檔案的字元輸出流(簡便的流)
OutputStream此抽象類,是表示輸出位元組流的所有類的超類。操作的資料都是位元組,定義了輸出位元組流的基本共性功能方法
OutputStream有很多子類,其中子類FileOutputStream可用來寫入資料到檔案。
FileOutputStream類,即檔案輸出流,是用於將資料寫入 File的輸出流
//可以續寫不覆蓋
FileOutputStream fos = new FileOutputStream(file, true);
InputStream此抽象類,是表示位元組輸入流的所有類的超類。
InputStream有很多子類,其中子類FileInputStream可用來讀取檔案內容。
FileInputStream 從檔案系統中的某個檔案中獲得輸入位元組
緩衝流,根據流的分類分類位元組緩衝流與字元緩衝流。
(位元組緩衝流)
寫入資料到流中,位元組緩衝輸出流 BufferedOutputStream
? 讀取流中的資料,位元組緩衝輸入流 BufferedInputStream
(字元緩衝流)
寫入資料到流中,位元組緩衝輸出流 BufferedFileWriter
? 讀取流中的資料,位元組緩衝輸入流 BufferedFileReader
繼承者 java.io.InputStream
繼承者 java.io.FilterInputStream
繼承者 java.io.BufferedInputStream
InputStream(位元組抽象類)-------------------BufferedInputStream(位元組高效)
FileInputStream(位元組普通流)
ObjectInputStream extends InputStream 反序列化流
OuputStream(位元組抽象類)---------------------FileOutputStream(位元組普通流)
-------------------FilterOutputStream
BufferedOutputStream(位元組高效)
PrintStream 位元組列印流
------------------- ObjectOutputStream序列化流
Reader(字元抽象類)------------------------BufferedFileWriter(字元高效)
------------------------FileReader(字元普通流)
------------------------InputStreamReader extends Reader 位元組轉字元的橋樑
Writer(字元抽象類)-----------------------BufferedFileWriter(字元高效)
-----------------------FileWriter(字元普通流)
------------------------字元列印流 PrintWriter 構造方法(public class PrintWriterextends Writer)
-------------------------OutputStreamWriter extends Writer 字元轉換為位元組的橋樑