1. 程式人生 > >(Java序列化為byte陣列方式) Java 序列化和反序列化

(Java序列化為byte陣列方式) Java 序列化和反序列化

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
 * Created by Lovell on 16/7/2.
 */
public class SerializeUtil {

    /**
     * serialize Object
* @param object * @return byte[] */ public static byte[] serialize(final Object object) { ObjectOutputStream oos = null; ByteArrayOutputStream baos = null; try { baos = new ByteArrayOutputStream(); oos = new ObjectOutputStream(baos); oos.writeObject(object); return
baos.toByteArray(); } catch (Exception e) { } return null; } /** * unserialize byte[] * @param bytes * @return Object */ public static Object unserialize(final byte[] bytes) { ByteArrayInputStream bais = null; try { bais = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bais); return ois.readObject(); } catch (Exception e) { } return null; } /** * serialize hash Map<Object, Object> * @param hash * @return Map<byte[], byte[]> */ public static Map<byte[], byte[]> serializehmoo2mbb(Map<Object, Object> hash) { Map<byte[], byte[]> result = new HashMap<byte[], byte[]>(); try { Set<Object> keys = hash.keySet(); if (keys != null && keys.size() > 0) { for (Object key : keys) { result.put(serialize(key), serialize(hash.get(key))); } } } catch (Exception e) { } return result; } /** * unserialize hash Map<byte[], byte[]> * @param hash * @return Map<Object, Object> */ public static Map<Object, Object> unserializehmbb2moo(final Map<byte[], byte[]> hash) { Map<Object, Object> result = new HashMap<Object, Object>(); try { Set<byte[]> keys = hash.keySet(); if (keys != null && keys.size() > 0) { for (byte[] key : keys) { result.put(unserialize(key), unserialize(hash.get(key))); } } } catch (Exception e) { } return result; } /** * serialize hash Map<String, Object> * @param hash * @return Map<byte[], byte[]> */ public static Map<byte[], byte[]> serializehmso2mbb(final Map<String, Object> hash) { Map<byte[], byte[]> result = new HashMap<byte[], byte[]>(); try { Set<String> keys = hash.keySet(); if (keys != null && keys.size() > 0) { for (String key : keys) { result.put(serialize(key), serialize(hash.get(key))); } } } catch (Exception e) { } return result; } /** * unserialize hash Map<byte[], byte[]> * @param hash * @return Map<String, Object> */ public static Map<String, Object> unserializehmbb2mso(final Map<byte[], byte[]> hash) { Map<String, Object> result = new HashMap<String, Object>(); try { Set<byte[]> keys = hash.keySet(); if (keys != null && keys.size() > 0) { for (byte[] key : keys) { result.put(unserialize(key).toString(), unserialize(hash.get(key))); } } } catch (Exception e) { } return result; } }

寫物件

Person物件寫入Redis中:

publicvoid setObject() {

Person person = newPerson(100, "alan");

jedis.set("person:100".getBytes(),SerializeUtil.serialize(person));

person = new Person(101,"bruce");

jedis.set("person:101".getBytes(),SerializeUtil.serialize(person));

}

執行上面程式碼之後,我們到命令列視窗中讀取該物件,看看有沒有寫入成功:

redis127.0.0.1:6379> get person:100

"\xac\xed\x00\x05sr\x00\x15alanland.redis.Person\x05\xf4\x8d9A\xf4`\xb0\x02\x00\x02I\x00\x02idL\x00\x04namet\x00\x12Ljava/lang/String;xp\x00\x00\x00dt\x00\x04alan"

可以取到序列化之後的值。

取物件

Jedis獲取物件:

publicPerson getObject(int id) {

byte[] person =jedis.get(("person:" + id).getBytes());

return (Person)SerializeUtil.unserialize(person);

}

測試一下上一步存入的兩個物件:

Personperson = test.getObject(100);

System.out.println(person.getId());

System.out.println(person.getName());

person= test.getObject(101);

System.out.println(person.getId());

System.out.println(person.getName());

Java控制檯輸入:

100

alan

101

bruce


相關推薦

(Java序列化為byte陣列方式) Java 序列序列

import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutput

Jedis儲存Java物件--Java序列化為byte陣列方式

轉載自:http://www.cnblogs.com/linjiqin/archive/2013/05/29/3105608.html 這種方式很常用,並且很多用-----我就在專案中大量使用過,感謝原作者寫的這麼好的文章 1、要儲存的物件 現在寫一個很土的Java B

Java序列序列實體為byte[]型別

1、序列化 //序列化為byte[] public static byte[] serialize(Object object) { ObjectOutputStream oos = nu

java序列序列得幾種方式

一.Java序列化的作用 有的時候我們想要把一個Java物件變成位元組流的形式傳出去,有的時候我們想要從一個位元組流中恢復一個Java物件。例如,有的時候我們想要 把一個Java物件寫入到硬碟或者傳輸到網路上面的其它計算機,這時我們就需要自己去通過java把相應的物件

java中什麽是序列序列

zab question .com 程序 還原 破壞 ans 但我 實現 序列化:能夠把一個對象用二進制的表示出來。 類似我第一個字節表示什麽屬性名詞,第二個字節表示什麽屬性值,第幾個字段表示有幾個屬性等。 而且這個二進制可以寫到硬

java中的序列序列學習筆記

文件 track 反序列化 out val nts 鼠標 main version 須要序列化的Person類: package cn.itcast_07; import java.io.Serializable; /* * NotSerializableE

java對象的序列序列

底層 修飾 我們 puts nbsp tostring read one asics 一,對象的序列化,反序列化1.對象的序列化,就是將Object轉換成byte序列,反之叫對象的反序列化2.做序列化需要有流類,序列化流(ObjectOutputStream),是(字節的)

java基礎序--列序列

color tran public png gin jdk style 硬盤 brush 一、什麽是序列化和反序列化:   序列化:是指把java堆內存中的對象轉換成字節(二進制流)的過程。也就是通過某種方式將java對象存儲在磁盤內存中,這個過程稱為序列化   反序列化:

2018-07-25期 Java序列序列編程小案例

測試 product set pri get sof serial span not package cn.sjq.Serializable.java;import java.io.FileInputStream;import java.io.FileOutputStrea

Java 之 Serializable 序列序列的概念,作用的通俗易懂的解釋

計算 transient 全部 序列化對象 語義 meta person int 較高的 遇到這個 Java Serializable 序列化這個接口,我們可能會有如下的問題a,什麽叫序列化和反序列化b,作用。為啥要實現這個 Serializable 接口,也就是為啥要序列

Java-裝飾流-物件流 - 序列序列

ObjectInputStream(反序列化) & ObjectOutputStream(序列化) 1.先寫出後讀取 2.讀取的順序必須保持一致 3.不是所有的物件都能序列化,要加上serializable接口才行 當不想對物件中的某個屬性序列化時,在屬性中新增transie

java序列序列物件

import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; impo

Java 之 Serializable 序列序列的概念 通俗易懂!!!

轉自: https://blog.csdn.net/qq_27093465/article/details/78544505 遇到這個 Java Serializable 序列化這個介面,我們可能會有如下的問題a,什麼叫序列化和反序列化 b,作用。為啥要實現這個 Serializable

Java中使用FastJSON進行物件的序列序列

Java中使用FastJSON進行物件的序列化和反序列化 1.新增依賴,maven的pom.xml檔案中新增以下依賴 <dependency> <groupId>com.alibaba</groupId> <arti

記一次使用Jackson對Java物件序列序列的踩坑經歷

背景大概是這樣,專案中的兩個服務A和B依賴了同一個common包的Java類,A對該類json序列化,而B對其反序列化。在一次common包升級過程中,這個Java類中增加了一個屬性,由於B其實用不到這個屬性,就只把A給升級打包了,這就導致B在反序列化時出現了一個異常:com.fasterxml.j

Think In Java——序列序列

1)Java中的Serializable介面和Externalizable介面有什麼區別? 這個是面試中關於Java序列化問的最多的問題。我的回答是,Externalizable介面提供了兩個方法writeExternal()和readExternal()。這兩個方法給我們

java物件的序列序列

引言:   序列化是將物件的狀態資訊轉換為可以儲存或傳輸的形式的過程,在序列化期間,物件將其帶你過去的狀態寫入到臨時或持儲存區,反序列化就是重新建立物件的過程,此物件來自於臨時或持久儲存區。 序列化的作用:   就好比如儲存資料到資料庫,將一些資料持久化到資料庫中,而有時候需要將物件持久化,雖然說將物件狀態持

【修真院java小課堂】什麼是序列序列,在RMI中是否要實現 SERIALIZABLE 介面, SERIALVERSIONUID的用處是什麼?

8.更多討論 1、serialVersionUID實際作用 假設本地資料庫中儲存了大量的user物件,後來由於需求,要修改User類中的屬性;如果不設定SerialVersionUID,根據屬性方法等自動生成,就會出現程式碼演示中的錯誤,造

Java序列序列存在的意義

文章來源: 一 javabean為什麼要實現序列化? 所謂的Serializable,就是java提供的通用資料儲存和讀取的介面。至於從什麼地方讀出來和儲存到哪裡去都被隱藏在函式引數的背後了。這樣子,任何型別只要實現了Serializable介面,就可以被儲存

Java中進行序列序列

物件序列化的目標是將物件儲存在磁碟中,或者允許在網路中直接傳輸物件。     物件序列化允許把記憶體中的Java物件轉換成平臺無關的二進位制流,從而允許把這種二進位制流持久儲存在磁碟上或者通過網路將這種二進位制流傳輸到另外一個網路節點。     其他程式一旦