導航:首頁 > 編程語言 > java泛型序列化

java泛型序列化

發布時間:2021-11-25 16:21:48

java 可序列化類型都有哪些

API中找到Serializable的子介面的實現類就可以知道了;
AdapterActivator, Attribute, Attribute, Attributes, BindingIterator, ClientRequestInfo, ClientRequestInterceptor, Codec, CodecFactory, Control, Current, Current, Current, CustomValue, DataInputStream, DataOutputStream, Descriptor, DHPrivateKey, DHPublicKey, DocAttribute, DomainManager, DSAPrivateKey, DSAPublicKey, DynAny, DynAnyFactory, DynArray, DynEnum, DynFixed, DynSequence, DynStruct, DynUnion, DynValue, DynValueBox, DynValueCommon, ECPrivateKey, ECPublicKey, ExtendedRequest, ExtendedResponse, Externalizable, IdAssignmentPolicy, IDLEntity, IDLType, IdUniquenessPolicy, ImplicitActivationPolicy, Interceptor, IORInfo, IORInterceptor, IORInterceptor_3_0, IRObject, Key, LifespanPolicy, Name, NamingContext, NamingContextExt, NotificationFilter, ObjectReferenceFactory, ObjectReferenceTemplate, ORBInitializer, ORBInitInfo, PBEKey, POA, POAManager, Policy, PolicyFactory, PrintJobAttribute, PrintRequestAttribute, PrintServiceAttribute, PrivateKey, PublicKey, QueryExp, RelationType, RemoteRef, RequestInfo, RequestProcessingPolicy, RSAMultiPrimePrivateCrtKey, RSAPrivateCrtKey, RSAPrivateKey, RSAPublicKey, RunTime, SecretKey, ServantActivator, ServantLocator, ServantManager, ServantRetentionPolicy, ServerRef, ServerRequestInfo, ServerRequestInterceptor, StreamableValue, SupportedValuesAttribute, ThreadPolicy, UnsolicitedNotification, ValueBase, ValueExp

--------------------------------------------------------------------------------

⑵ 某些java類為什麼要實現Serializable介面

Serializable介面是啟用其序列化功能的介面。實現java.io.Serializable
介面的類是可序列化的。沒有實現此介面的類將不能使它們的任一狀態被序列化或逆序列化。
使用情況:
當遍歷一個圖形時,可能會遇到不支持可序列化介面的對象。在此情況下,將拋出
NotSerializableException,並將標識不可序列化對象的類。
在序列化和反序列化過程中需要特殊處理的類必須使用下列准確簽名來實現特殊方法:
private
void
writeObject(java.io.ObjectOutputStream
out)
throws
IOException
private
void
readObject(java.io.ObjectInputStream
in)
throws
IOException,
ClassNotFoundException;
writeObject
方法負責寫入特定類的對象的狀態,以便相應的
readObject
方法可以還原它。通過調用
out.defaultWriteObject
可以調用保存
Object
的欄位的默認機制。該方法本身不需要涉及屬於其超類或子類的狀態。狀態是通過使用
writeObject
方法或使用
DataOutput
支持的用於基本數據類型的方法將各個欄位寫入
ObjectOutputStream
來保存的。
readObject
方法負責從流中讀取並還原類欄位。它可以調用
in.defaultReadObject
來調用默認機制,以還原對象的非靜態和非瞬態欄位。defaultReadObject
方法使用流中的信息來分配流中通過當前對象中相應命名欄位保存的對象的欄位。這用於處理類發展後需要添加新欄位的情形。
將對象寫入流時需要指定要使用的替代對象的可序列化類,應使用准確的簽名來實現此特殊方法:
ANY-ACCESS-MODIFIER
Object
writeReplace()
throws
ObjectStreamException;

writeReplace
方法將由序列化調用,前提是如果此方法存在,而且它可以通過被序列化對象的類中定義的一個方法訪問。因此,該方法可以擁有私有
(private)、受保護的
(protected)
和包私有
(package-private)
訪問。子類對此方法的訪問遵循
java
訪問規則。
在從流中讀取類的一個實例時需要指定替代的類應使用的准確簽名來實現此特殊方法。
ANY-ACCESS-MODIFIER
Object
readResolve()
throws
ObjectStreamException;

readResolve
方法遵循與
writeReplace
相同的調用規則和訪問規則。
序列化運行時使用一個稱為
serialVersionUID
版本號與每個可序列化類相關聯,該序列號在反序列化過程中用於驗證序列化對象的發送者和接收者是否為該對象載入了與序列化兼容的類。如果接收者載入的該對象的類的
serialVersionUID
與對應的發送者的類的版本號不同,則反序列化將會導致
InvalidClassException。可序列化類可以通過聲明名為
"serialVersionUID"
的欄位(該欄位必須是靜態
(static)、最終
(final)

long
型欄位)顯式聲明其自己的
serialVersionUID:
ANY-ACCESS-MODIFIER
static
final
long
serialVersionUID
=
42L;
如果可序列化類未顯式聲明
serialVersionUID,則序列化運行時將基於該類的各個方面計算該類的默認
serialVersionUID
值,如「Java(TM)
對象序列化規范」中所述。不過,強烈建議
所有可序列化類都顯式聲明
serialVersionUID
值,原因計算默認的
serialVersionUID
對類的詳細信息具有較高的敏感性,根據編譯器實現的不同可能千差萬別,這樣在反序列化過程中可能會導致意外的
InvalidClassException。因此,為保證
serialVersionUID
值跨不同
java
編譯器實現的一致性,序列化類必須聲明一個明確的
serialVersionUID
值。還強烈建議使用
private
修改器顯示聲明
serialVersionUID(如果可能),原因是這種聲明僅應用於立即聲明類
--
serialVersionUID
欄位作為繼承成員沒有用處。
--------------------------
實現java.io.Serializable
介面的類是可序列化的。沒有實現此介面的類將不能使它們的任一狀態被序列化或逆序列化。
序列化類的所有子類本身都是可序列化的。這個序列化介面沒有任何方法和域,僅用於標識序列化的語意。允許非序列化類的子類型序列化,子類型可以假定負責保存和恢復父類型的公有的、保護的和(如果可訪問)包的域的狀態。只要該類(即父類)有一個無參構造子,可初始化它的狀態,那麼子類型就可承擔上述職責;如果該類沒有無參構造函數,在這種情況下申明一個可序列化的類是一個錯誤。此錯誤將在運行時被檢測。
例如:Integer實現了Serializable,所以可以把一個Integer的對象用IO寫到文件里,之後再可以從文件里讀出,如你開始寫入的時候那個對象的intValue()
是5的話,那讀出來之後也是5。這一點體現了用序化類的作用,即用來傳送類的對象。
當一個JavaBean在構造工具內被用戶化,並與其它Bean建立連接之後,它的所有狀態都應當可被保存,下一次被load進構造工具內或在運行時,就應當是上一次修改完的信息。為了能做到這一點,要把Bean的某些欄位的信息保存下來,在定義Bean時要使它實現Java.io.Serializable介面。例如:
public
class
Button
implements
Java.io.Serializable
{……}
實現了序列化介面的Bean中欄位的信息將被自動保存。若不想保存某些字(這里的Bean中欄位的信息將被自動保存是什麼意思?這個自動保存是怎麼實現的?)
段的信息則可在這些欄位前冠以transient或static關鍵字,transient和static變數的信息是不可被保存的。通常,一個Bean所有公開出來的屬性都應當是被保存的,也可有選擇地保存內部狀態。Bean開發者在修改軟體時,可以添加欄位,移走對其它類的引用,改變一個欄位的private、protected或public狀態,這些都不影響類的存儲結構關系。然而,當從類中刪除一個欄位,改變一個變數在類體系中的位置,把某個欄位改成transient/static,或原來是transient/static,現改為別的特性時,都將引起存儲關系的變化。
所謂的Serializable,就是java提供的通用數據保存和讀取的介面。至於從什麼地方讀出來和保存到哪裡去都被隱藏在函數參數的背後了。這樣子,任何類型只要實現了Serializable介面,就可以被保存到文件中,或者作為數據流通過網路發送到別的地方。也可以用管道來傳輸到系統的其他程序中。這樣子極大的簡化了類的設計。只要設計一個保存一個讀取功能就能解決上面說得所有問題。

⑶ java serializable作為一個序列化的介面,為什麼能當做數據類型來用…

為什麼要做序列化,其實就是為了網路上傳播。因為網上傳播需要同一個類型,所以這樣轉。

⑷ java webService 返回對象類型如何序列化

實現 Serializable 介面

⑸ 關於java泛型的疑問 大神們幫幫忙啊

有2個方法重載:gson.fromjson(str, Person.class);
gson.fromJson(str, new TypeToken<List<Person>>(){}.getType());
第一個返回轉換之後的實體,後者返回列表類型。
gson.<MyClass<T>> fromJson(result,(Type)new TypeToken<MyClass<T>>(){}.getType());這句不報錯么?我咋覺得語法錯的

⑹ java中bigdecimal怎麼序列化

實現bigdecimal類型轉成String類型:回 BigDecimal bd = new BigDecimal("xxx"); String str = bd.toString(); 擴展:答String類型轉成bigdecimal類型 String str = "xxx"; BigDecimal bd = new BigDecimal(str);

⑺ java網路傳遞序列化對象拋類型轉換異常怎麼解決

get方法 就可以了啊 用Gson吧

⑻ java默認序列化如何去做,哪些欄位不會被序列化

需要序列化的類實現 Serialization 介面,基本數據類型都會被實例化,其他類型默認不會實例化

⑼ java 可序列化類型都有哪些

json,xml,等

⑽ 關於java序列化多個不同類型對象的存取與讀取萬分感謝

readStreamHeader();
加入這個,重新讀取文件頭就好了

閱讀全文

與java泛型序列化相關的資料

熱點內容
傢具機床數控編程在哪裡學 瀏覽:500
java編寫乘法口訣表 瀏覽:673
sqlite3查看資料庫表 瀏覽:647
數據包丟失怎麼辦 瀏覽:147
網路詐騙怎麼抓 瀏覽:992
臨時文件怎麼提取視頻 瀏覽:302
華為榮耀6x文件管理 瀏覽:863
姚司機app哪裡下載 瀏覽:586
虛擬機中的文件在哪個位置 瀏覽:835
iphone為什麼自動卸載了app 瀏覽:398
華為x14g版升級 瀏覽:524
打開系統文件夾的視頻 瀏覽:510
發現不了網站應該怎麼處理 瀏覽:828
win10禁止優化文件夾 瀏覽:204
廣數和凱恩帝的用什麼電腦編程好 瀏覽:154
紅色達摩升級經驗 瀏覽:461
哪裡得到數據分析產品 瀏覽:594
win7文件加密取消方法 瀏覽:836
如何更加徹底地查看手機文件 瀏覽:332
買車哪個網站靠譜太平洋汽車 瀏覽:838

友情鏈接