轉換流和位元組流

2021-06-06 12:25:31 字數 2557 閱讀 3139

今天學了轉換流與序列化,今天的課是我從開學以來所學的理解的較好的一次課,前幾天的課都不怎麼理解.好好努力學習吧!

轉換流reader

|--inputstreamreader

|--filereader:專門用於處理檔案的字元讀取流物件。

writer

|--outputstreamwriter

|--filewriter:專門用於處理檔案的字元寫入流物件。

特點:1,是位元組流和字元流之間的橋梁。

2,該流物件中可以對讀取到的位元組資料進行指定編碼表的編碼轉換。

什麼時候使用呢?

1,當位元組和字元之間有轉換動作時。

2,流操作的資料需要進行編碼表的指定時。

具體的物件體現:

1,inputstreamreader:位元組到字元的橋梁。

2,outputstreamwriter:字元到位元組的橋梁。

這兩個流物件是字元流體系中的成員。

那麼它們有轉換作用,而本身又是字元流。所以在構造的時候,需要傳入位元組流物件進來。

建構函式:

inputstreamreader(inputstream):通過該建構函式初始化,使用的是本系統預設的編碼表gbk。

inputstreamreader(inputstream,string charset):通過該建構函式初始化,可以指定編碼表。

outputstreamwriter(outputstream):通過該建構函式初始化,使用的是本系統預設的編碼表gbk。

outputstreamwriter(outputstream,string charset):通過該建構函式初始化,可以指定編碼表。

操作檔案的字元流物件是轉換流的子類。

reader

|--inputstreamreader

|--filereader

writer

|--outputstreamwriter

|--filewriter

轉換流中的read方法。已經融入了編碼表,

在底層呼叫位元組流的read方法時將獲取的乙個或者多個位元組資料進行臨時儲存,

並去查指定的編碼表,如果編碼表沒有指定,

查的是預設碼表。那麼轉流流的read方法就可以返回乙個字元比如中文。

轉換流已經完成了編碼轉換的動作,對於直接操作的文字檔案的filereaer而言,就不用在重新定義了,

只要繼承該轉換流,獲取其方法,就可以直接操作文字檔案中的字元資料了。

注意:在使用filereader操作文字資料時,該物件使用的是預設的編碼表。

如果要使用指定編碼表時,必須使用轉換流。

filereader fr = new filereader("a.txt");//操作a.txt的中的資料使用的本系統預設的gbk。

操作a.txt的中的資料使用的也是本系統預設的gbk。

inputstreamreader isr = new inputstreamreader(new fileinputstream("a.txt"));

這兩句的**的意義相同。

如果a.txt中的檔案中的字元資料是通過utf-8的形式編碼。

那麼在讀取時,就必須指定編碼表。

那麼轉換流必須使用。

inputstreamreader isr = new inputstreamreader(new fileinputstream("a.txt"),"utf-8");

objectinputstream

objectoutputstream

可以通過這兩個流物件直接操作已有物件並將物件進行本地持久化儲存。

儲存後的物件可以進行網路傳輸。

兩個物件的特有方法:

objectinputstream

object readobject():該方法丟擲異常:classnotfountexception。

objectoutputstream

void writeobject(object):被寫入的物件必須實現乙個介面:serializable

否則會丟擲:notserializableexception

serializable:該介面其實就是乙個沒有方法的標記介面。

用於給類指定乙個uid。該uid是通過類中的可序列化成員的數字簽名運算出來的乙個long型的值。

只要是這些成員沒有變化,那麼該值每次運算都一樣。

該值用於判斷被序列化的物件和類檔案是否相容。

如果被序列化的物件需要被不同的類版本所相容。可以在類中自定義uid。

定義方式:static final long serialversionuid = 42l;

注意:對應靜態的成員變數,不會被序列化。

對應非靜態也不想被序列化的成員而言,可以通過transient關鍵字修飾。

通常,這兩個物件成對使用。

1,明確資料來源和資料匯。

其實是為了明確輸入流還是輸出流。

2,明確操作的資料是否是純文字資料。

其實是為了明確字元流還是位元組流。

資料來源:鍵盤system.in,硬碟file開頭的流物件,記憶體(陣列)。

資料匯:控制台system.out,硬碟file開頭的流物件,記憶體(陣列)。

Java位元組流,字元流,轉換流

一 位元組流 a.可以用來操作文字,還可以操作,音訊等 例題 使用位元組的輸出輸入流進行檔案的複製 public class demo 方法2.使用位元組陣列的方法讀寫 read byteb 從此輸入流中將最多 b.length 個位元組的資料讀入乙個 byte 陣列中。byte b new byt...

字元流 位元組流 轉換流簡介

子類字首代表功能 字尾是其父類 字元流 reader write 字元流底層還是位元組流實現 字元流讀取檔案 filewrite fileread fr.read 1判斷是否讀到檔案最後 字元緩衝流 bufferedwrite,bw.newline 寫時緩衝區換行,跨平台,bufferedwrite...

Java中位元組流 字元流 轉換流

主要位元組流 fileoutputstream 檔案輸出流 fileinputstream 檔案輸入流 案例 需求 複製檔案public static void fun catch filenotfoundexception e catch ioexception e finally catch i...