最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Netty序列化深入理解與使用

 更新時(shí)間:2022年08月01日 10:46:38   作者:kaico2018  
序列化 (Serialization)是將對象的狀態(tài)信息轉(zhuǎn)換為可以存儲或傳輸?shù)男问降倪^程。在序列化期間,對象將其當(dāng)前狀態(tài)寫入到臨時(shí)或持久性存儲區(qū)。以后,可以通過從存儲區(qū)中讀取或反序列化對象的狀態(tài),重新創(chuàng)建該對象

序列化與反序列化

序列化:把對象轉(zhuǎn)換成字節(jié)的過程,稱為對象序列化

反序列化:把字節(jié)恢復(fù)成對象的過程,稱為反序列化

  • 對象的持久化概念:把字節(jié)保存的硬盤上永久的存放
  • 網(wǎng)絡(luò)傳輸對象概念:客戶端將對象序列化為字節(jié)(序列化),變成二進(jìn)制的形式發(fā)送到服務(wù)器端端,服務(wù)器端接受到字節(jié)對象后,反序列化成對象

注意序列化的類必須要實(shí)現(xiàn) Serializable 接口, transient 修飾變量使得該變量不被序列化。

網(wǎng)絡(luò)傳輸過程中不能直接傳輸對象,TCP協(xié)議的底層是二進(jìn)制。

序列化模式

1.對象持久化概念:將對象轉(zhuǎn)換成字節(jié),存放到硬盤或者是數(shù)據(jù)庫中

2. 網(wǎng)絡(luò)傳輸對象概念:客戶端將對象轉(zhuǎn)成字節(jié)的形式(序列化)、變成二進(jìn)制的形式發(fā)送給服務(wù)器端,服務(wù)器端接受到字節(jié)之后,反序列化成對象(rpc 遠(yuǎn)程通訊)。

其他對象序列化方式

1、將對象轉(zhuǎn)換成json類型,實(shí)現(xiàn)跨語言

客戶端將對象轉(zhuǎn)換程json類型,傳遞給服務(wù)器端序列化。

服務(wù)器端獲取到j(luò)son, 在將json轉(zhuǎn)換成對象反序列化。

2、Xml類型

一般比較重量級,一般只有銀行、保險(xiǎn)公司使用這種方式。

3、ProtoBuf(谷歌第三方協(xié)議,谷歌自定義協(xié)議)

4、MessagePack

也屬于json里面的

使用json協(xié)議實(shí)現(xiàn)對象的傳輸

就是將對象轉(zhuǎn)換成json字符串進(jìn)行傳輸。

MessagePack編碼器

它像JSON, 但是更快更小。

MessagePack是一種高效的二進(jìn)制序列化格式。它允許您在JSON等多種語之間交換數(shù)據(jù),但它更快速更小巧。小整數(shù)被編碼為單個(gè)字節(jié),典型的短字符串除了字符串本身之外只需要一個(gè)額外的字節(jié)。

支持Python、Ruby、 Java、 C/C++ 等眾多語言。宣稱比Google Protocol Buffers還要快4倍。。

使用案例:

引入mave依賴:

<dependency>
    <groupId>org.msgpack</groupId>
    <artifactId>msgpack</artifactId>
    <version>0.6.12</version>
</dependency>

基本api使用:

 // 創(chuàng)建MessagePack
MessagePack messagePack = new MessagePack();
MsgEntity meite = new MsgEntity(UUID.randomUUID().toString(), "kaico學(xué)習(xí)");
// 序列化
byte[] bs = messagePack.write(meite);
Value read1 = messagePack.read(bs);
System.out.println(read1);
// 反序列化
MsgEntity read = messagePack.read(bs, MsgEntity.class);
System.out.println(read);

在Netty框架中使用

編碼器

public class MsgpackEncoder extends MessageToByteEncoder {
    /**
     * 對我們數(shù)據(jù)實(shí)現(xiàn)編碼
     *
     * @param channelHandlerContext
     * @param msg
     * @param byteBuf
     * @throws Exception
     */
    @Override
    protected void encode(ChannelHandlerContext channelHandlerContext, Object msg, ByteBuf byteBuf) throws Exception {
        MessagePack msgpack = new MessagePack();
        byteBuf.writeBytes(msgpack.write(msg));
    }
}

解碼器

public class MsgpackDecoder extends MessageToMessageDecoder<ByteBuf> {
    /**
     * 服務(wù)器解碼數(shù)據(jù)
     *
     * @param channelHandlerContext
     * @param byteBuf
     * @param list
     * @throws Exception
     */
    @Override
    protected void decode(ChannelHandlerContext channelHandlerContext, ByteBuf byteBuf, List<Object> list) throws Exception {
        final int length = byteBuf.readableBytes();
        byte[] b = new byte[length];
        byteBuf.getBytes(byteBuf.readerIndex(), b, 0, length);
        MessagePack msgpack = new MessagePack();
        list.add(msgpack.read(b));
    }
}

服務(wù)端使用

socketChannel.pipeline().addLast(new MsgpackDecoder());
socketChannel.pipeline().addLast(new ServerHandler());

客戶端使用

ch.pipeline().addLast(new MsgpackEncoder());
ch.pipeline().addLast(new ClientHandler());

到此這篇關(guān)于Netty序列化深入理解與使用的文章就介紹到這了,更多相關(guān)Netty序列化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中如何正確定義字符串

    Java中如何正確定義字符串

    這篇文章主要給大家介紹了關(guān)于Java中如何正確定義字符串的相關(guān)資料,在Java中定義一個(gè)字符串最簡單的方法是用雙引號把它包圍起來,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • Java中JDom解析XML_動力節(jié)點(diǎn)Java學(xué)院整理

    Java中JDom解析XML_動力節(jié)點(diǎn)Java學(xué)院整理

    JDOM是一種解析XML的Java工具包。DOM適合于當(dāng)今流行的各種語言,包括Java,JavaScripte,VB,VBScript,Perl,C,C++等。下面通過本文給大家介紹Java中JDom解析XML的方法,感興趣的朋友一起學(xué)習(xí)吧
    2017-07-07
  • java操作elasticsearch的案例解析

    java操作elasticsearch的案例解析

    這篇文章主要介紹了java操作elasticsearch的案例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • spring?MVC實(shí)現(xiàn)簡單登錄功能

    spring?MVC實(shí)現(xiàn)簡單登錄功能

    這篇文章主要為大家詳細(xì)介紹了spring?MVC實(shí)現(xiàn)簡單登錄功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • 淺談JavaWeb中的web.xml配置部署描述符文件

    淺談JavaWeb中的web.xml配置部署描述符文件

    下面小編就為大家?guī)硪黄獪\談JavaWeb中的web.xml配置部署描述符文件。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • 深入解析Java中反射中的invoke()方法

    深入解析Java中反射中的invoke()方法

    最近復(fù)習(xí)了一下Java反射的使用,正好了解一下Java中反射中的invoke()方法,稍微整理精簡一下做下分享,感興趣的可以了解一下
    2021-06-06
  • ZooKeeper框架教程Curator分布式鎖實(shí)現(xiàn)及源碼分析

    ZooKeeper框架教程Curator分布式鎖實(shí)現(xiàn)及源碼分析

    本文是ZooKeeper入門系列教程,本篇為大家介紹zookeeper一個(gè)優(yōu)秀的框架Curator,提供了各種分布式協(xié)調(diào)的服務(wù),Curator中有著更為標(biāo)準(zhǔn)、規(guī)范的分布式鎖實(shí)現(xiàn)
    2022-01-01
  • SpringBoot中自動配置原理解析

    SpringBoot中自動配置原理解析

    SpringBoost是基于Spring框架開發(fā)出來的功能更強(qiáng)大的Java程序開發(fā)框架,本文將以廣角視覺來剖析SpringBoot自動配置的原理,涉及部分Spring、SpringBoot源碼,需要的可以參考下
    2023-11-11
  • Java JDK11基于嵌套的訪問控制的實(shí)現(xiàn)

    Java JDK11基于嵌套的訪問控制的實(shí)現(xiàn)

    這篇文章主要介紹了Java JDK11基于嵌套的訪問控制的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • Java實(shí)現(xiàn)文件上傳的方法

    Java實(shí)現(xiàn)文件上傳的方法

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)文件上傳的方法,供大家參考,感興趣的朋友可以參考一下
    2016-05-05

最新評論

万载县| 天柱县| 玛纳斯县| 吴旗县| 临城县| 隆子县| 五寨县| 肇东市| 纳雍县| 永吉县| 泰来县| 和硕县| 晋州市| 东阿县| 封丘县| 灵山县| 扶余县| 滨州市| 商都县| 思茅市| 淮南市| 呈贡县| 门源| 隆昌县| 滁州市| 英山县| 云林县| 丁青县| 巴南区| 滁州市| 吴川市| 凤台县| 岢岚县| 浦东新区| 肇东市| 宜川县| 北宁市| 奉化市| 吴川市| 钟山县| 卢龙县|