溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MessagePack Java 0.6.X 使用一個(gè)消息打包(message-packable)類

發(fā)布時(shí)間:2020-06-30 10:14:52 來(lái)源:網(wǎng)絡(luò) 閱讀:229 作者:HoneyMoose 欄目:大數(shù)據(jù)

使用注解?@Message?來(lái)讓你可以序列化你自己類中對(duì)象的?public 字段。

本代碼可以在?https://github.com/cwiki-us-demo/messagepack-6-demo-java/blob/master/src/test/java/com/insight/demo/msgpack/MessagePack6Object.java?中下載到本地后進(jìn)行編譯測(cè)試。

package?com.insight.demo.msgpack;

import?org.junit.Test;
import?org.msgpack.MessagePack;
import?org.msgpack.annotation.Message;
import?org.slf4j.Logger;
import?org.slf4j.LoggerFactory;

import?java.util.UUID;

import?static?org.junit.Assert.assertEquals;

/**
?*?MessagePack6Objects
?*
?*?@author?yhu
?*/
public?class?MessagePack6Object?{
????final?Logger?logger?=?LoggerFactory.getLogger(MessagePack6Object.class);

????/**
?????*?MessageData?Message?Object
?????*/
????@Message?//?Annotation
????public?static?class?MessageData?{
????????//?public?fields?are?serialized.
????????public?String?uuid;
????????public?String?name;
????????public?double?version;
????}


????/**
?????*?Test?MessagePack6Objects
?????*/
????@Test
????public?void?testMessagePack6Objects()?{
????????logger.debug("MessagePack6Objects?for?Objects");

????????String?uuid?=?UUID.randomUUID().toString();

????????//?INIT?OBJ
????????MessageData?src?=?new?MessageData();
????????src.uuid?=?uuid;
????????src.name?=?"MessagePack6";
????????src.version?=?0.6;

????????try?{
????????????MessagePack?msgPack?=?new?MessagePack();

????????????//?Serialization
????????????logger.debug("------?Serialization?------");
????????????byte[]?bytes?=?msgPack.write(src);
????????????logger.debug("Bytes?Array?Length:?[{}]",?bytes.length);

????????????//?Deserialization
????????????logger.debug("------?Deserialization?------");
????????????MessageData?dst?=?msgPack.read(bytes,?MessageData.class);
????????????logger.debug("Check?Object?for?UUID:?[{}]",?dst.uuid);

????????????assertEquals(uuid,?dst.uuid);

????????}?catch?(Exception?ex)?{
????????????logger.error("MessagePack?Serialization?And?Deserialization?error",?ex);
????????}
????}
}

?

如果你希望按照順序序列化多個(gè)對(duì)象的話,你可以使用??Packer?和??Unpacker?多個(gè)對(duì)象。

這是因?yàn)?MessagePack.write(Object)?和?read(byte[])?實(shí)際上每次都調(diào)用創(chuàng)建了?Packer?和?Unpacker?對(duì)象。

為了使用?Packer?和??Unpacker?對(duì)象,請(qǐng)調(diào)用?createPacker(OutputStream)?和??createUnpacker(InputStream)。

本代碼可以?https://github.com/cwiki-us-demo/messagepack-6-demo-java/blob/master/src/test/java/com/insight/demo/msgpack/MessagePack6Objects.java?中查看。

?

package?com.insight.demo.msgpack;

import?org.junit.Test;
import?org.msgpack.MessagePack;
import?org.msgpack.annotation.Message;
import?org.msgpack.packer.Packer;
import?org.msgpack.unpacker.Unpacker;
import?org.slf4j.Logger;
import?org.slf4j.LoggerFactory;

import?java.io.ByteArrayInputStream;
import?java.io.ByteArrayOutputStream;
import?java.util.UUID;

import?static?org.junit.Assert.assertEquals;

/**
?*?MessagePack6Objects
?*
?*?@author?yhu
?*/
public?class?MessagePack6Objects?{
????final?Logger?logger?=?LoggerFactory.getLogger(MessagePack6Objects.class);

????/**
?????*?MessageData?Message?Objects
?????*/
????@Message?//?Annotation
????public?static?class?MessageData?{
????????//?public?fields?are?serialized.
????????public?String?uuid;
????????public?String?name;
????????public?double?version;
????}


????/**
?????*?Test?MessagePack6Objects
?????*/
????@Test
????public?void?testMessagePack6Objects()?{
????????logger.debug("MessagePack6Objects?for?Objects");

????????String?uuid?=?UUID.randomUUID().toString();

????????//?INIT?OBJ
????????MessageData?src1?=?new?MessageData();
????????src1.uuid?=?uuid;
????????src1.name?=?"MessagePack6-src1";
????????src1.version?=?0.6;

????????MessageData?src2?=?new?MessageData();
????????src2.uuid?=?uuid;
????????src2.name?=?"MessagePack6-src2";
????????src2.version?=?10.6;

????????MessageData?src3?=?new?MessageData();
????????src3.uuid?=?uuid;
????????src3.name?=?"MessagePack6-src3";
????????src3.version?=?1.6;

????????try?{
????????????MessagePack?msgPack?=?new?MessagePack();

????????????//?Serialization
????????????logger.debug("------?Serialization?------");
????????????ByteArrayOutputStream?out?=?new?ByteArrayOutputStream();
????????????Packer?packer?=?msgPack.createPacker(out);
????????????packer.write(src1);
????????????packer.write(src2);
????????????packer.write(src3);

????????????byte[]?bytes?=?out.toByteArray();
????????????logger.debug("Bytes?Array?Length:?[{}]",?bytes.length);

????????????//?Deserialization
????????????logger.debug("------?Deserialization?------");
????????????ByteArrayInputStream?in?=?new?ByteArrayInputStream(bytes);
????????????Unpacker?unpacker?=?msgPack.createUnpacker(in);

????????????MessageData?dst1?=?unpacker.read(MessageData.class);
????????????MessageData?dst2?=?unpacker.read(MessageData.class);
????????????MessageData?dst3?=?unpacker.read(MessageData.class);

????????????logger.debug("Check?Object?for?UUID:?[{}]",?dst1.uuid);

????????????assertEquals(uuid,?dst1.uuid);

????????}?catch?(Exception?ex)?{
????????????logger.error("MessagePack?Serialization?And?Deserialization?error",?ex);
????????}
????}
}

?

?

https://www.cwiki.us/display/Serialization/QuickStart+For+MessagePack+Java+0.6.X


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI