JAVA隨筆 物件序列化與隨機檔案

2021-05-28 00:47:56 字數 2550 閱讀 8737

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操作文字資料時,該物件使用的是預設的編碼表。如果要使用指定編碼表時,必須使用轉換流。

如果a.txt中的檔案中的字元資料是通過utf-8的形式編碼。那麼在讀取時,就必須指定編碼表。那麼轉換流必須使用。

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

流操作的基本規律:

1,明確資料來源和資料匯。是為了明確輸入流還是輸出流。

2,明確操作的資料是否是純文字資料。是為了明確字元流還是位元組流。

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

兩個物件的特有方法:

objectinputstream

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

objectoutputstream

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

否則會丟擲:notserializableexception 

serializable:該介面其實就是乙個沒有方法的標記介面。用於給類指定乙個uid。該uid是通過類中的可序列化成員的數字簽名運算出來的乙個long型的值。只要是這些成員沒有變化,那麼該值每次運算都一樣。該值用於判斷被序列化的物件和類檔案是否相容。如果被序列化的物件需要被不同的類版本所相容。可以在類中自定義uid。

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

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

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

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

該物件並不是流體系中的一員。該物件中封裝了位元組流,同時還封裝了乙個緩衝區(位元組陣列),通過內部的指標來運算元組中的資料。

該物件特點:

1,該物件只能操作檔案,所以建構函式接收兩種型別的引數。

a,字串路徑。

b,file物件。

2,該物件既可以對檔案進行讀取,也可以寫入。

在進行物件例項化時,必須要指定的該物件的操作模式,r rw等。

該物件最有特點的方法:

skipbytes():跳過指定的位元組數。

seek():指定指標的位置。

getfilepointer():獲取指標的位置。

通過這些方法,就可以完成對乙個檔案資料的隨機的訪問。

該物件功能,可以讀資料,可以寫入資料,如果寫入位置已有資料,會發生資料覆蓋。也就是可以對資料進行修改。在使用該物件時,建議資料都是有規則的。或者是分段的。

注意;該物件在例項化時,如果要操作的檔案不存在,會自動建立。如果要操作的檔案存在,則不會建立,如果存在的檔案有資料。那麼在沒有指定指標位置的情況下,寫入資料,會將檔案開頭的資料覆蓋。

Java中物件序列化與反序列化

1.建立可序列化物件 public class student implements serializable public student string name,int age,int default1 public void addresscheck public string getname...

JAVA物件序列化,反序列化

理解序列化和反序列化對理解物件導向有很大的幫助。舉例如下,序列化格式自己定義 我們有兩個類,動物,人,人繼承動物。其中 人的屬性有 name 名稱 phonenum 手機號碼 等 人的方法有 serialize deserialize 動物的屬性有 mood 情緒 性別 等 動物的方法有 seria...

JAVA 物件序列化

概念 物件序列化,就是將乙個物件轉化為二進位制的資料流 方法 想要被序列化的物件,在定義該類時,必須實現serializable介面,或者實現externalizable介面 物件序列化實質是把物件的屬性進行序列化為二進位制資料流,方法則不管 因為物件直接只有屬性是有差異的 serializable...