1、Java中有幾種型別的流?
A:
Java中按流的型別劃分為:
輸入流(InputStream)
和
輸出流(OutpuStream)
、按實現功能劃分為:
節點流
(可以從或向一個地方讀取資料。eg :
FileReader
)和
處理流
(對一個已存在的流的連線和封裝,透過所封裝的流的功能呼叫實現資料的讀取。eg:
BufferReader
),一般處理流的構造方法總是要帶上一個其他流物件作為引數,一個流物件經過其他流的多次封裝,則稱為流的連結。按處理流的單位劃分為:
位元組流
和
字元流
,位元組流繼承於
InputStream
和
OutputStream
,字元流繼承於
InputStreamReader
和
OutputStreamWriter
。
2、位元組流如何轉化為字元流,以及位元組流和字元流的區別?
A:
位元組輸入流轉字元輸入流透過
InputStreamReader
實現,構造引數傳入
InputStream
物件,位元組輸出流轉字元輸出流透過
OutputStreamWriter
,構造引數傳入
OutputStream
物件。a:位元組流在讀取時是讀取到一個位元組就返回一個位元組,而位元組流則是讀取到一個或多個位元組時,會先查指定的編碼表(中文對應的位元組時2個,在UTF-8碼錶中時3個位元組),將查到的字元返回。位元組流可以處理所有型別的資料,而字元流只能處理字元資料。只要處理資料時純文字資料,就要優先考慮使用字元流,除此都用位元組流。位元組流主要操作byte型別的資料,以
byte
陣列為準,主要操作
OutputStream
和
InputStream
。字元處理的單位為2個位元組的
Unicode
字元,分別操作字元、字元陣列和字串,而位元組流處理的單位為1個位元組,所以處理國際化多語言支援,讀取音訊檔案、圖片、影片檔案等用位元組流讀取,讀取文字類的資料,可使用字元流,比如使用
Reader
和
Writer
專門操作字元流的類。
3、如何將一個Java物件序列化到檔案中或者將序列化的物件儲存的檔案讀取出來?
A:
主要使用到兩個類
ObjectOutputStream
和
ObjectInputStream
,在序列化物件的時候,物件的類必須實現
Serializable
介面,作為可序列化的標示。讀取程式碼如下:
// 寫入序列化物件到檔案中ObjectOutputStream outputStream = null;try { outputStream = new ObjectOutputStream(new FileOutputStream(new File(“D://test。txt”))); // Object outputStream。writeObject(new Object());} catch (IOException e) { e。printStackTrace();}finally { if(outputStream!=null){ try { outputStream。close(); } catch (IOException e) { e。printStackTrace(); } }}// 讀取序列化檔案中被序列化的物件ObjectInputStream inputStream = null;try { inputStream = new ObjectInputStream(new FileInputStream(new File(“D://test。txt”))); Object obj = inputStream。readObject(); // 。。。todo} catch (Exception e) { // IOException or ClassNotFoundException e。printStackTrace();} finally { if(inputStream != null){ try { inputStream。close(); } catch (IOException e) { e。printStackTrace(); } }}