• <em id="6vhwh"><rt id="6vhwh"></rt></em>

    <style id="6vhwh"></style>

    <style id="6vhwh"></style>
    1. <style id="6vhwh"></style>
        <sub id="6vhwh"><p id="6vhwh"></p></sub>
        <p id="6vhwh"></p>
          1. 国产亚洲欧洲av综合一区二区三区 ,色爱综合另类图片av,亚洲av免费成人在线,久久热在线视频精品视频,成在人线av无码免费,国产精品一区二区久久毛片,亚洲精品成人片在线观看精品字幕 ,久久亚洲精品成人av秋霞

             首頁 > 專欄

            當(dāng)你還在用Gson時(shí),Square那幫人已經(jīng)開發(fā)出了Moshi了!!

            更新時(shí)間:2023-05-21 15:22:34 閱讀: 評論:0

            大獲全勝的意思-香蕉保存方法

            當(dāng)你還在用Gson時(shí),Square那幫人已經(jīng)開發(fā)出了Moshi了!!
            2023年5月21日發(fā)(作者:附件英文)

            當(dāng)你還在?Gson時(shí),Square那幫?已經(jīng)開發(fā)出了Moshi了!!

            好久不見,曾經(jīng)我們相處得很好,但是是時(shí)候說再見了。

            在你的朋友圈中也許會(huì)聽到這樣的語句(也可能沒有),但這并?是本篇?章的主題,我們要談?wù)摰氖?個(gè)新的關(guān)于 Android 和 kotlin 序列

            化框架!我們需要將 Gson 遷移到 Moshi上?了。

            當(dāng)我們談?wù)摓樯禡oshi是更優(yōu)秀的框架,或者怎么遷移到 Moshi之前,我們先來了解?下今天的 Gson 的發(fā)展。

            Gson,what?

            當(dāng)我們查看 Gson 的倉庫時(shí),它是這么描述的:

            ?個(gè)Java 的序列化/反序列化框架,?來將Java對象轉(zhuǎn)換成Json對象,或者反之。

            那么它有以下缺點(diǎn):

            很顯然它對kotlin并不友好,當(dāng)然也不是kotlin寫的( Gson 是純Java實(shí)現(xiàn)的),所以每個(gè)?都可以清楚的意識到 Gson 已經(jīng)不再是?個(gè)

            現(xiàn)代的開發(fā)框架了。它發(fā)布于2008年,距離今天已經(jīng)12年了,看上去已經(jīng)不更新了(這個(gè)的確,看了?下最新的?次更新時(shí)間是9個(gè)?

            錢了),完完全全是?個(gè)將死的項(xiàng)?了。

            最近沒有更新,上?次更新看上去并沒有?的更新或者問題修復(fù)(意思就是?修?補(bǔ)),事實(shí)上不去碰那些運(yùn)?得很好的程序,破壞數(shù)百

            萬使?Gson庫的app 是有道理的(個(gè)?認(rèn)為這?還是正?夸贊了Gson的流?和穩(wěn)定),但是對于Gson這個(gè)項(xiàng)?來說,它似乎正在死

            去。

            Gson 庫的?法數(shù)?概為1036個(gè),?概是 Moshi 庫中?法數(shù)的兩倍(Moshi中?法數(shù)?概為500)。

            庫的體積 使? Gson ?約使你的app增?了300kb,?Moshi?概有120kb。

            Gson 使?了 Java的反射實(shí)現(xiàn)了序列化和反序列,? Moshi 使?了 Kotlin 代碼?動(dòng)?持。

            Gson不?持對象屬性有默認(rèn)值。如果在Gson字符串中缺少了屬性對應(yīng)的字符串,即使你設(shè)置了默認(rèn)值,它將來還是null值(這個(gè)不是特

            別明?啥意思)。

            假設(shè)我們認(rèn)為 Gson 將死,那我們將?向何??當(dāng)然我們可以繼續(xù)使? Gson,因?yàn)樗?直都正常?作!但是對于那些好奇?很強(qiáng)的開發(fā)者

            和kotlin愛好者來說,我們還有 Moshi。接下來我們來看看 什么是 Moshi 和 為什么是 Moshi了。

            什么是 Moshi ?

            ?個(gè) 現(xiàn)代的 kotlin 和 Java Json解析庫

            (也是?名??的square公司出品的)。主要特點(diǎn)是 現(xiàn)代的、kotlin友好的、更快的、擁有?量可靠的功能。先來看看這些?叉的功能吧:

            更好的 API

            Moshi提供了更好更現(xiàn)代的 API,你可以使?此強(qiáng)?功能的 API 進(jìn)?簡單整潔的操作。

            在 Moshi中 注解(Annotation) 被視為最重要的部分,注解可以允許你添加?些信息來更加細(xì)粒度的實(shí)現(xiàn)上下?序列化。

            你可以?定義注解來解析你的Json數(shù)據(jù)屬性,(就像解析顏?使?@ColorInt, @FromHexColor?樣)

            ?定義適配器或者上下?反序列可以使功能更加整潔,從?減少樣板代碼。

            Moshi 擁有更好的、更具?性化的獲取序列化失敗信息的能?。在當(dāng)你的app發(fā)布之后,從奇怪的堆棧信息中不知道應(yīng)該做什么,那么

            Moshi將會(huì)是?個(gè)巨?的進(jìn)步(可以幫助你獲取異常信息)。

            Moshi 擁有 newBuilder() ?法從上游的Adapter中來幫助創(chuàng)建新的Adapter,這就有點(diǎn)像OkHttp 或者 Okio builder模式了,它超級

            有?,因?yàn)槟憧梢詣?chuàng)建獨(dú)?的Adapter,這樣就不需要擁有解析全部對象的Adapter(這句話的意思,需要理解Moshi解析字符流的?式

            和Gson不?致,Gson是從前到后,?個(gè)字符不落下去解析,?Moshi可以直接跳過?標(biāo)字符,只需要得到??想要的字符)

            Moshi ?持多態(tài)數(shù)據(jù)類型,同時(shí)也?持未知的數(shù)據(jù)類型的回退。

            Moshi在 Kotlin 中擁有代碼?動(dòng)?成功能,這個(gè)很好!在注解的幫助下,你可以更加快速的序列化反序列化.這個(gè)?Gson使?反射?

            法快多了。

            Moshi 的表現(xiàn)

            Moshi ? Gson 要快(通過實(shí)驗(yàn)得出結(jié)論), ?且Moshi消耗的內(nèi)存更少,這是因?yàn)樗?了 Okio,Okio可以在解析Json字符流的過程提前

            預(yù)測或者期望忽略掉未知的、不需要的字段(從?達(dá)到速度快、內(nèi)存?的?的, ). Retrofit底層也是?了 Okio,所以你才會(huì)發(fā)?什么?

            Json序列化庫(Moshi) 和 ?絡(luò)請求?具(Retrofit) 可以共?它們的緩沖區(qū),這樣將會(huì)在?絡(luò)請求和序列化時(shí)降低內(nèi)存的消耗。

            理論說的差不多了,看看代碼咋寫吧

            來看看咋樣?步?步從Gson遷移到 Moshi 吧。

            1. 添加 依賴

            /*Moshi*/

            def moshiVersion = "1.10.0"

            implementation(":moshi:$moshiVersion")

            kapt(":moshi-kotlin-codegen:$moshiVersion")

            implementation("it2:converter-moshi:2.9.0")

            2. 將所有的 @SerializedName 替換成 @Json

            data class MediaCandidateData(

            @SerializedName("width")

            val width: Int,

            @SerializedName("height")

            val height: Int,

            @SerializedName("url")

            val url: String

            )

            替換為:

            data class MediaCandidateData(

            @Json(name = "width")

            val width: Int,

            @Json(name = "height")

            val height: Int,

            @Json(name = "url")

            val url: String

            )

            3. 給所有的Data Class 添加 @JsonClass(generateAdapter = true) 注解

            給所有的Data Class 添加 @JsonClass(generateAdapter = true)注解,將會(huì)參與到序列化反序列化的進(jìn)程中。它幫助Moshi使?代碼

            ?動(dòng)?成??使?將會(huì)降低速度的反射。

            @JsonClass(generateAdapter = true)

            data class MediaCandidateData(

            @Json(name = "width")

            val width: Int,

            @Json(name = "height")

            val height: Int,

            @Json(name = "url")

            val url: String

            )

            4. 替換Gson的實(shí)例為 Moshi

            如果使? Dagger 來提供依賴,你可以需要這么?:

            @Singleton

            @Provides

            fun provideGson() = GsonBuilder().tLenient().create()

            替換為:

            @Singleton

            @Provides

            fun providesMoshi() = Moshi.Builder().build()

            5. 使? Retrofit時(shí)替換 converter

            當(dāng)你使?Retrofit 和 Dagger 時(shí),你可能需要這么做:

            @Provides

            @Singleton

            fun provideRetrofit(okHttpClient: OkHttpClient, gson: Gson) = Retrofit.Builder()

            .client(okHttpClient)

            .addConverterFactory(GsonConverterFactory.create(gson))

            .baUrl(BASE_ENDPOINT)

            .build()

            現(xiàn)在替換為:

            @Provides

            @Singleton

            fun provideRetrofit(okHttpClient: OkHttpClient, mosh: Moshi) = Retrofit.Builder()

            .client(okHttpClient)

            .addConverterFactory(MoshiConverterFactory.create(mosh))

            .baUrl(BASE_ENDPOINT)

            .build()

            就是這么簡單,從Gson遷移到 Moshi?常簡單。

            當(dāng)然也有些特例需要單獨(dú)講明,這可能需要下篇?章說明了。

            勤奮學(xué)習(xí)的成語-神奇魔鏡

            當(dāng)你還在用Gson時(shí),Square那幫人已經(jīng)開發(fā)出了Moshi了!!

            本文發(fā)布于:2023-05-21 15:22:33,感謝您對本站的認(rèn)可!

            本文鏈接:http://m.newhan.cn/zhishi/a/1684653754171727.html

            版權(quán)聲明:本站內(nèi)容均來自互聯(lián)網(wǎng),僅供演示用,請勿用于商業(yè)和其他非法用途。如果侵犯了您的權(quán)益請與我們聯(lián)系,我們將在24小時(shí)內(nèi)刪除。

            本文word下載地址:當(dāng)你還在用Gson時(shí),Square那幫人已經(jīng)開發(fā)出了Moshi了!!.doc

            本文 PDF 下載地址:當(dāng)你還在用Gson時(shí),Square那幫人已經(jīng)開發(fā)出了Moshi了!!.pdf

            標(biāo)簽:square
            留言與評論(共有 0 條評論)
               
            驗(yàn)證碼:
            推薦文章
            排行榜
            Copyright ?2019-2022 Comsenz Inc.Powered by ? 實(shí)用文體寫作網(wǎng)旗下知識大全大全欄目是一個(gè)全百科類寶庫! 優(yōu)秀范文|法律文書|專利查詢|
            主站蜘蛛池模板: 丁香五月亚洲综合在线国内自拍| 亚洲av不卡电影在线网址最新| 亚洲熟伦熟女新五十熟妇| 欧美一区二区三区成人久久片| 国产精品最新免费视频| 在线免费观看视频1区| 亚洲精品国产av天美传媒| 国产国拍亚洲精品永久软件| 国产欧美久久一区二区三区| 日韩精品一卡二卡在线观看| 福利网午夜视频一区二区| 国产成人午夜在线视频极速观看 | 西西人体大胆444WWW| 国产三级伦理视频在线| 日本高清视频网站www| av片在线观看永久免费| 亚洲天堂亚洲天堂亚洲色图| 亚洲美女高潮不断亚洲| 中文字幕日韩国产精品| 女女互揉吃奶揉到高潮视频| 日本大胆欧美人术艺术动态| 亚洲日韩久热中文字幕| 国产欧美日韩综合精品二区| 亚洲中文字幕日韩精品| 精品国产一区二区三区2021| 国产极品粉嫩尤物一区二区| 国产一区国产精品自拍| 国产精品 无码专区| 免费a级毛片18以上观看精品| 国产va免费精品观看精品| 精品一区二区不卡无码AV| 鲁丝片一区二区三区免费 | 日韩美少妇大胆一区二区| 韩国精品一区二区三区| 国产精品福利自产拍在线观看| 成人无码精品免费视频在线观看 | 国产精品综合色区av| 67194亚洲无码| mm1313亚洲国产精品| 无码中文av波多野结衣一区| 国产亚洲精品AA片在线播放天|