重學java中的輸入輸出流
以前剛學java的時候也學過Java流的知識,但是都比較淺顯,最近工作中發現用的地方特別多,每次用的時候總是要卡一會兒,這才意思到自己學的不紮實,所以準備再系統學習總結下。
簡要說明:
Java所有的I/O機制都是基於資料流進行輸入輸出,這些資料流表示了字元或者位元組資料的流動序列。Java的I/O流提供了讀寫資料的標準方法。任何Java中表示資料來源的物件都會提供以資料流的方式讀寫它的資料的方法。
流是一組有順序的,有起點和終點的位元組集合,是對資料傳輸的總稱或抽象。即資料在兩裝置間的傳輸稱為流,流的本質是資料傳輸,根據資料傳輸特性將流抽象為各種類,方便更直觀的進行資料操作。
JDK所提供的所有流類位於java.io包中,都分別繼承自以下四種抽象流類:
InputStream:繼承自InputStream的流都是用於向程式中輸入資料的,且資料單位都是位元組(8位)。
OutputSteam:繼承自OutputStream的流都是程式用於向外輸出資料的,且資料單位都是位元組(8位)。
Reader:繼承自Reader的流都是用於向程式中輸入資料的,且資料單位都是字元(16位)。
Writer:繼承自Writer的流都是程式用於向外輸出資料的,且資料單位都是字元(16位)。
(這裡以前一直搞混InputStream和OutputSteam的概念,要這樣理解:向程式輸入為input,從程式向外部輸出則為output,Reader和Writer也是類似這樣的意思,即站在程式的角度分辨。)
Java流的分類
- 按流向分:
輸入流: 程式可以從中讀取資料的流。
輸出流: 程式能向其中寫入資料的流。 - 按資料傳輸單位分:
位元組流: 以位元組為單位傳輸資料的流
字元流: 以字元為單位傳輸資料的流 - 按功能分:
節點流: 用於直接操作目標裝置的流
過濾流(處理流): 是對一個已存在的流的連結和封裝,通過對資料進行處理為程式提供功能強大、靈活的讀寫功能,是使用一個 已經存在的輸入流或者輸出流連結建立的。例如能實現緩衝的BufferedInputStream,實現基本資料型別的讀的DataInputStream。
這裡對節點流和處理流比較陌生,簡單記錄一下
對於InutStream來說有這麼多的子類。其中FilterInputStream(他的子類DataInputStream,BufferedInputStream…都是過濾流)是過濾流,其他都是節點流。
樣的FilterOutputStream(和他的子類DataOutStream,BuffereOutStream是過濾流)是過濾流。其他都是節點流、
程式碼示例:
public class StreamStudy {
public static void main(String[] args) throws Exception {
File file = new File("test"+File.separatorChar+"test.txt");
if (!file.exists()){
System.out.println("檔案不存在!");
}
//1、程式讀檔案
FileInputStream fileInputStream = new FileInputStream(file);
byte[] b = new byte[256];
fileInputStream.read(b);
System.out.println(new String(b,"utf-8"));
fileInputStream.close();
//2、程式寫檔案(覆蓋原來的資料,如果追加資料使用FileWriter 或 RandomAccessFile )
FileOutputStream fileOutputStream = new FileOutputStream(file);
fileOutputStream.write("寫入資料".getBytes("utf-8"));
//flush 這裡的flush是沒有效果的,FileOutputStream沒有對flush方法重寫,只用使用緩衝區的時候,
// 這個flush才會生效,例如Bufferxxx..
fileOutputStream.flush();
fileOutputStream.close();
//3.字元輸出流FileWriter 適用於文字型別的資料
//引數append 為true 追加資料
FileWriter fileWriter = new FileWriter(file,true);
fileWriter.write("是小明");
fileWriter.flush();
fileWriter.close();
//4.字元讀取流FileReader
FileReader fileReader = new FileReader(file);
char []c = new char[256];
fileReader.read(c);
fileReader.close();
System.out.println(c);
//5、位元組流 字元流相互轉化
FileInputStream fileInputStream1 = new FileInputStream(file);
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream1, Charset.forName("utf-8"));
char[] d = new char[128];
inputStreamReader.read(d);
inputStreamReader.close();
fileInputStream.close();
System.out.println(c);
FileOutputStream fileOutputStream1 = new FileOutputStream(file);
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream1, "utf-8");
outputStreamWriter.write("我是");
outputStreamWriter.flush();
outputStreamWriter.close();
fileInputStream.close();
//6、使用處理流封裝節點流 當然還有其他處理流,這裡拿DataOutputStream DataInputStream舉例
//DataOutputStream 可以寫入任何資料物件
//寫資料
FileOutputStream fileOutputStream2 = new FileOutputStream(file);
DataOutputStream dataOutputStream = new DataOutputStream(fileOutputStream2); //封裝節點流
//處理流提供更豐富的方法
dataOutputStream.writeChar(5);
dataOutputStream.writeInt(5);
dataOutputStream.writeUTF("Dasdasd");
dataOutputStream.flush();
dataOutputStream.close();
//讀資料
FileInputStream fileInputStream2 = new FileInputStream(file);
DataInputStream dataInputStream = new DataInputStream(fileInputStream2);
System.out.println(dataInputStream.readChar());
System.out.println(dataInputStream.readInt());
System.out.println(dataInputStream.readUTF());
}
}
相關文章
- Java 輸入輸出流Java
- JAVA輸入輸出流Java
- 詳解Java中的IO輸入輸出流!Java
- java中基本輸入輸出流的解釋Java
- 輸入輸出流
- C++中的檔案輸入/輸出(3):掌握輸入/輸出流 (轉)C++
- Java中的輸入輸出總結Java
- Java中資料輸入輸出流——DataInputStream和DataOutputStreamJavaAI
- [java IO流]之 基本資料型別輸入輸出流Java資料型別
- c++入門:輸入輸出流C++
- IO流的位元組輸入輸出流(InputStream,OutputStream)
- [java IO流]之 鍵盤顯示器輸入輸出流(System)Java
- 【Java基礎知識】IO流--標準輸入輸出流、列印流PrintStreamJava
- C++ 中輸入輸出流及檔案流操作筆記C++筆記
- [C++]輸入/輸出流類庫C++
- Java —— 標準輸入輸出Java
- Java基礎輸入輸出Java
- Java------簡單的輸入/輸出Java
- linux中的輸入與輸出管理(重定向輸入,輸出,管道符)Linux
- 輸入一段字串,去除字串中重複的字元,並輸出字串字元
- 直播app原始碼,Java的輸入輸出APP原始碼Java
- android基礎學習-java篇day10-step3-第六節:java輸入輸出流AndroidJava
- C語言中輸入輸出重定,freopen()妙用。C語言
- JAVA筆記(12)——輸入和輸出Java筆記
- java_檔案輸入與輸出Java
- 檔案輸入輸出處理(二)-位元組流
- Java&Android 基礎知識梳理(6) 位元組輸入輸出流JavaAndroid
- 輸入輸出
- 執行緒間的協作(3)——管道輸入/輸出流執行緒
- Java I/O系統學習系列二:輸入和輸出Java
- 初學Python(六)——輸入輸出Python
- C++中的檔案輸入/輸出(4):檢測輸入/輸出的狀態標誌 (轉)C++
- [java IO流]之 萬能輸出流列印流printWriterJava
- 資料的輸入輸出
- Python的輸入輸出Python
- Java IO輸入輸出及亂碼問題Java
- 資料流輸出
- 【C++】輸入輸出C++