Java I/O : 概述

Java I/O 是機器獲取和交換信息的主要渠道,當前在這個海量數據時代,數據在網絡中隨處流動,這個六到的過程都涉及到I/O問題,可以說I/O問題是整個人機交互的核心問題,很多Web應用系統的瓶頸都是I/O瓶頸。

 

I/O 的概念:I/O 即我們所說的輸入和輸出,既然是輸入和輸出,那麼肯定是一個應用程序從某個數據源進行讀取,再將原始數據輸出到目標媒介,下面我們看普通的數據源和媒介都有哪些:

  • 文件
  • 管道
  • 網絡連接
  • 內存緩存
  • System in, System out ,System.error 

Java 的IO機制主要是通過java.io包下的類和接口來支持,在java.io包下主要分類如下:

  1. 基於字節操作:InputStream和outputStream
  2. 基於字符操作:Writer和Reader
  3. 基於磁盤操作:File
  4. 基於網絡操作:socket(不在java.io包下)

    a 和 b 主要是傳輸數據的數據格式,c 和 d 主要是傳輸數據的方式。

在Java IO 中,我們常提到“輸入流”、”輸出流“等概念,那麼什麼是流呢?所謂的流,其實就是一種抽象數據的總稱,其本質是能夠進行傳輸的。例如:鍵盤、文件、網絡連接等,在Java中可以抽象的表述爲"流"。

  1.  按照流的數據流向,可以將其劃分爲:輸入流和輸出流
  2.  按照流的處理單位,可以將其劃分爲:字節流和字符流,在java中,字節佔1個Byte,即8位;而字符佔2個Byte,即16位。同時需要注意的是,java的字節是有符號類型,而字符是無符號類型。

JAVA  IO流的框架

1.以字節爲單位的I/O框架圖

a.InputStream 相關類

b.OutputStream 相關類

 

  •  InputStream和OutputStream :是以字節爲單位的輸入流和以字節爲單位的輸出流的超類,InputStream 提供read()接口讀取字節數據,OutPutStream 提供了Write()接口從輸出流中取字節數據 。
  • ByteArrayInputStream和ByteArrayOutputStream :是字節數組輸入流和字節數組輸出流,主要是通過內部緩衝區也就是一個byte數組來實現的。
  • PipleInputStream :管道輸入流,必須和PipleOutStream 一起使用,實現多線程間的管道通信。
  • DataInputStream和DataOutputStream : 數據輸入流數和數據輸出流,可以輸入和輸出java基本數據類型。
  • FilterInputStream : 實現自定義過濾輸入流,基本上僅僅只是覆蓋了InputStream的所有方法,FileterOutputStream類似。
  • ObjectInputStream :對象輸入流,能夠從輸入流中讀取java對象,和ObjectOutputStream 一起,用來提供對“基本數據或對象”的持久存儲,注意:序列化和反序列化一個對象之前,必須實現java.io.Serializable接口。
  • FileInputStream和FileOutputStream : 文件輸入流和文件輸出流,用於對文件進行讀取和寫入操作。
  • BufferInputStream 和BufferOutputStream : 緩衝輸入流,爲輸入流提供緩衝區,提供IO速度。
  • PrintStream : 打印輸出流,能爲其他輸出流添加功能。

2.以字符爲單位的I/O框架圖

a.Reader相關類

b.Writer相關類

  • Reader和 Writer 分別是以字符爲單位的輸入輸出流的超類,Reader提供read() 接口取字符數據,Writer提供write()接口往其中寫入數據。
  • BufferedReader和BufferedWriter 是字符緩衝輸入、輸出流,它們的作用分別是爲另一個輸入和輸出流添加緩衝功能。
  • FilterReader 和 FilterWriter  字符類型的過濾輸入流和過濾輸出流
  • CharArrayReader 和CharArrayWriter  字符數組輸入流和字符數組輸出流。用於讀取字符數組,操作的數據是以字符爲單位。
  • PipedReader  字符類型的管道輸入流,和PipedWriter 一起可以通過管道進行線程間的通信。兩者必須配套使用
  • InputStreamReader 和OutputStreamWriter ,是字節轉字符的輸入流和字節轉字符的輸出流,它們是字節流通向字符流的橋樑:使用指定的charset將字節轉換字符
  • PrintWriter :字符類型的打印輸出流,作用類似PrintStream.

 

3.字節轉換爲字符流的框架圖:

 

InputStreamReader 類是字節到字符的轉換橋樑,InputStream到Reader 要指定編碼字符集,否則採用系統默認的字符集,很可能會出現亂碼問題。StreamDecoder是完成字節到字符的解碼實現類。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章