string转成对象_详解Java I/O流(五),对象序列化
對象序列化
什么是序列化和反序列化呢?
序列化就是將對象轉成字節序列的過程,反序列化就是將字節序列重組成對象的過程。
在這里插入圖片描述
為什么要有對象序列化機制
程序中的對象,其實是存在有內存中,當我們JVM關閉時,無論如何它都不會繼續存在了。那有沒有一種機制能讓對象具有“持久性”呢?序列化機制提供了一種方法,你可以將對象序列化的字節流輸入到文件保存在磁盤上。
序列化機制的另外一種意義便是我們可以通過網絡傳輸對象了,Java中的 遠程方法調用(RMI),底層就需要序列化機制的保證。
在Java中怎么實現序列化和反序列化
首先要序列化的對象必須實現一個Serializable接口(這是一個標識接口,不包括任何方法)
1public?interface?Serializable?{2}其次需要是用兩個對象流類:ObjectInputStream 和ObjectOutputStream。主要使用ObjectInputStream對象的readObject方法讀入對象、ObjectOutputStream的writeObject方法寫入對象到流中
下面我們通過序列化機制將一個簡單的pojo對象寫入到文件,并再次讀入到程序內存。
1public?class?User?implements?Serializable?{ 2????private?String?name; 3????private?int?age; 4 5????public?User(String?name,?int?age)?{ 6????????this.name?=?name; 7????????this.age?=?age; 8????} 910????@Override11????public?String?toString()?{12????????return?"User{"?+13????????????????"name='"?+?name?+?'''?+14????????????????",?age='"?+?age?+?'''?+15????????????????'}';16????}1718????public?static?void?main(String[]?args)?throws?IOException,?ClassNotFoundException?{19????????User?user?=?new?User("二營長",18);20????????ObjectOutputStream?objectOps?=?new?ObjectOutputStream(new?FileOutputStream("f:/user.out"));21????????objectOps.writeObject(user);22????????objectOps.close();2324????????//?再從文件中取出對象25????????ObjectInputStream?objectIns?=?new?ObjectInputStream(new?FileInputStream("f:/user.out"));2627????????//?這里要做一次強轉28????????User?user1?=?(User)?objectIns.readObject();29????????System.out.println(user1);30????????objectIns.close();31????}32}33程序運行結果:
1User{name='二營長',?age='18'}不想序列化的數據使用transient(瞬時)關鍵字屏蔽
如果我們上面的user對象有一個password字段,屬于敏感信息,這種是不能走序列化的方式的,但是實現了Serializable 接口的對象會自動序列化所有的數據域,怎么辦呢?在password字段上加上關鍵字transient就好了。
1?private?transient?String?password;序列化機制就簡單介紹到這里吧。這是Java原生的序列化,現在市面上有好多序列化協議可以選擇,比如Json、FastJson、Thrift、Hessian 、protobuf等。
總結
以上是生活随笔為你收集整理的string转成对象_详解Java I/O流(五),对象序列化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ORACLE查询表最近更改的数据
- 下一篇: 应用框架的设计与实现学习手札系列(持续更