Java中的輸入輸出總結

飄過的小熊發表於2016-11-29

Java中的輸入輸出總結

標籤(空格分隔): java


參考:Java線上中文文件

IO這塊的類,介面什麼的實在是太多了,一直沒有好好的理清過,下面花點時間來深入的掌握一下。原理還要慢慢地梳理。

輸入輸出體系介紹

什麼是輸入輸出處理(IO)

包括對控制檯,記憶體,檔案,圖形影像,網路和資料庫的讀寫等。在Java語言中,java.io包就提供了
很多完成輸入輸出處理功能。

什麼是流?

流是一種有序的位元組源或目的,當程式需要讀取資料時就要開啟一個通向資料來源的流;而當程式需要
寫入資料的時候就會開啟一個通向目的地的流,資料就好像在管道中流動一樣。
流的分類
將流按三種方式分類:輸入流和輸出流,位元組流和字元流,以及從一個特定地方讀寫的結點流和連線已經存在的流的過濾流。這種分類方式是相互重疊的

  • 輸入流和輸出流
  • 位元組流和字元流
  • 從一個特定地方讀寫的結點流和連線已經存在的流的過濾流

基本流的介紹

基本流一般是指

  • InputStream
  • OutputStream
  • Reader
  • Writer

這四個抽象類表示的流,其他流均是他們派生出來的子類。其中InputStreamOutputStream是處理8位的位元組流資料,ReaderWriter是處理16位的字元流資料。注意的是,位元組流和字元流可以相互之間進行轉換,使用的就是轉換器InputStreamReaderOutputStreamWriterInputStreamReader將位元組流InputStream轉換為Reader的字元流。同理OutputStreamWriterOutputStream位元組流轉換為Writer的字元流。

  • 過濾流FilterInputStreamFileterOutputStream繼承基本流,並實現了過濾介面DataInputDataOutput
  • 物件流ObjectInputStreamObjectOutputStream也繼承基本流,並實現了物件介面ObjectInputObjectOutput
  • 隨機檔案RandomAccessFile也實現了過濾介面,目的就是為了簡化讀寫手續,統一資料讀寫方法。

    檔案流完成對磁碟檔案的讀寫,而檔案類File主要是管理檔案或者資料夾的屬性

位元組輸入輸出系列(位元組IO)

位元組輸入輸出,以InputStream為代表的輸入和以OutputStream為代表的輸出,它們和自己的子類一起構成了位元組輸入輸出體系。

位元組輸入輸出

InputStream

這個類是一個抽象類,為所有位元組輸入類的父類,其方法都是通過子類物件來呼叫的,主要方法有
QQ圖片20161129141742.png-12.5kB

OutputStream

這個類是抽象類,是所有位元組輸出類的父類,其方法都是通過子類物件來呼叫
QQ圖片20161129142152.png-8.2kB

位元組標準輸入輸出

位元組標準輸入流

System.in就是位元組標準輸入流的物件。主要接收控制檯的輸入,並提供read()方法讀取資料。可以使用InputStream類的所有方法。這個物件有兩種使用方式

  1. 使用Scanner掃描輸入流物件,實現從控制檯輸入
 Scanner in = new Scanner(System.in);
  1. 使用InputStreamReader將System.in轉換成字元流,再進行下一步操作。或者再用BufferedReader包裝一下。
 BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

位元組標準輸出流

System.out就是標準輸出流PrintStream的一個物件,主要完成資料的格式化輸出和在控制檯中輸出各種資料型別結果。PrintStream是OutputStream的子類,因此System.out可以使用OutputStream的所有方法。自身的format()和printf()方法很有趣。,。,。
(沒有想到一直使用這個東西,居然原理在今天被發現了,System.out是一個PrintStream物件,println()是該物件呼叫的一個方法,。,。,。

位元組檔案輸入輸出

FileInputStream

該類是InputStream的子類,用於完成讀取檔案的位元組值功能,還可以讀取如影像資料之類的原始資料流。
常用的構造方法:

  • FileInputStream(File file):通過已經存在的File類物件進行構造
  • FileInputStream(String filename):直接使用檔名進行構造

FileOutputStream

該類是OutputStream的子類,用於將資料寫入位元組檔案輸出流,也可寫入影像資料之類道德原始位元組流。
常用的構造方法:
- FileOutputStream(File file):通過已經存在File類物件進行構造
- FileOutputStream(String name):通過名字進行構造

位元組過濾輸入輸出

過濾流的作用是能夠在讀寫資料的同時對資料進行處理,並且提供同步機制,使得某一個時刻只有一個執行緒訪問這個輸入輸出流,防止多個執行緒同時對同一個輸入輸出流進行操作帶來的壞結果。使用時必須把過濾流與某個具體的輸入輸出流相連線。
通常的做法是在構造方法的引數中指定要連線的輸入輸出流。
過濾流的父類是FileInputStream和FilterOutputStream,最常用的是他們的子類DataInputStream和DataOutputStream,用於完成平臺無關的位元組過濾輸入輸出處理。

DataInputStream

DataOutputStream

字元輸入輸出系列(字元IO)

輸入輸出兩大分支,以Reader為父類的字元輸入,以Writer為父類的字元輸出。它們與各自的子類共同構成了字元輸入輸出體系

字元輸入輸出

Reader

是一個用於讀取字元類的抽象類,為所有字元輸入類的父類,其方法都是通過子類物件來呼叫的。
QQ圖片20161129152829.png-11kB

Writer

是一個用於寫入字元流的抽象類,為所有輸出字元類的父類,其方法都是通過子類物件來呼叫的。

QQ圖片20161129153044.png-37.3kB

字元標準輸出

,。,。,這裡沒有字元標準輸入
PrintWriter,主要完成字元標準輸出流的文字格式化
常用構造方法:

  • 由檔名構造字元標準輸出流物件
PrintWriter pw=new PrintWriter("data.txt");
  • 由位元組輸出流構造字元標準輸出流物件
PrintWriter pw=new PrintWriter(System.out);
  • 由字元標準輸出流物件構造新的字元標準輸出流物件
PrintWriter pw1=new PrintWriter(pw);

字元緩衝輸入輸出

BufferedReader

從字元輸入流中讀取文字並緩衝各個字元,以便提供關於字元,陣列和文字行的高效讀取方式,還可以改變緩衝區的大小。
常用的構造方法:

BufferedReader br=new BufferedReader(Reader in);

普通方法常用就是:String readLine()讀取一行字串,並去掉回車換行符。

BufferedWriter

將文字寫入字元輸出流並緩衝各個字元,以提供單個字元,陣列和字串的高效寫入方式,緩衝區的大小可以改變。常用的構造方法是BufferedWriter(Writer out),常用的方法是:void newLine(),用於寫入一個回車符。

字元檔案輸入輸出

FileReader類和FileWriter類。

FileReader

用來讀取字元檔案;
常用構造方法:

  • FileReader(File file)
  • FileReader(String filename)

FileWriter

用來寫入字元檔案。
構造方法:
QQ圖片20161129155435.png-7.7kB

字串輸入輸出

StringReader

使用字串輸入流讀取一個字串,構造方法:
StringReader(String string);

StringWriter

通過字元流的字串緩衝區的輸出來構造字串,構造方法:
StringWriter()

相關文章