日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Google Protocol Buffers和java字符串处理控制

發(fā)布時(shí)間:2025/5/22 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Google Protocol Buffers和java字符串处理控制 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

大多數(shù)的操作碼被從夜晚復(fù)制。懶得敲。

直接在源代碼和測試結(jié)果如下。

serabuffer.proto檔。使用下面的命令來生成java代碼。

protoc -I=./ --java_out=./ serabuffer.proto


package Feinno.Practice.Learn;option java_package = "Feinno.Practice.Learn"; option java_outer_classname = "ProtoBufferPractice";message msgInfo {required int32 ID = 1;required int64 GoodID = 2;required string Url = 3;required string Guid = 4;required string Type = 5;required int32 Order = 6; }
以下是java部分代碼。直接輸出結(jié)果,要測試不同字符串長度的,能夠直接替換當(dāng)中的字符串然后run就可以。

package Feinno.Practice.Learn;import com.google.protobuf.ByteString;public class Test {public byte[] serialize(){ProtoBufferPractice.msgInfo.Builder builder=ProtoBufferPractice.msgInfo.newBuilder(); builder.setGoodID(100); builder.setGuid("11111-23222-3333-444"); builder.setOrder(0); builder.setType("及基于消息的協(xié)調(diào)機(jī)制不適合在某些應(yīng)用中使用,因此須要有一種可靠的、可擴(kuò)展的、分布式的、可配置的協(xié)調(diào)機(jī)制來統(tǒng)一系統(tǒng)的狀態(tài)"); builder.setID(10); builder.setUrl("http://www.gufensoso.com/search/?q=java+protocol+buffer"); ProtoBufferPractice.msgInfo info=builder.build(); byte[] result=info.toByteArray() ; return result;}public void deserialize(ByteString result){try{ ProtoBufferPractice.msgInfo msg = ProtoBufferPractice.msgInfo.parseFrom(result); // System.out.println(msg); } catch(Exception ex){ System.out.println(ex.getMessage()); }}public static void main(String[] args) {Test t=new Test();long s1=System.nanoTime();byte[] b = t.serialize();long s2=System.nanoTime(); System.out.println("序列化后長度是:"+b.length+" 耗時(shí):"+(s2-s1)); long a1=System.nanoTime(); t.deserialize(ByteString.copyFrom(b));long a2=System.nanoTime(); System.out.println("反序列化耗時(shí):"+(a2-a1)); long s3=System.nanoTime(); StringBuilder sb=new StringBuilder();sb.append("?").append("100").append("?").append("11111-23222-3333-444").append("?").append("0").append("?").append("及基于消息的協(xié)調(diào)機(jī)制不適合在某些應(yīng)用中使用,因此須要有一種可靠的、可擴(kuò)展的、分布式的、可配置的協(xié)調(diào)機(jī)制來統(tǒng)一系統(tǒng)的狀態(tài)").append("?").append("10").append("?").append("http://xxx.jpg");byte[] c=sb.toString().getBytes();long s4=System.nanoTime();System.out.println("拼接字符后長度:"+c.length+" 耗時(shí):"+(s4-s3));long c1=System.nanoTime(); sb.toString().split("?");long c2=System.nanoTime(); System.out.println("拆字符串耗時(shí):"+(c2-c1)); } }
1、字符串長度較短時(shí):
序列化后長度是:50 耗時(shí):32115919
拼接字符后長度:56 耗時(shí):36223
反序列化耗時(shí):2484294
拆字符串耗時(shí):305783

2、字符串長度較長時(shí),也就是如今代碼中的。


序列化后長度是:265 耗時(shí):20092297
拼接字符后長度:229 耗時(shí):48297
反序列化耗時(shí):2445656
拆字符串耗時(shí):354683

3、字符串長度再加長時(shí)
序列化后長度是:435 耗時(shí):26542406
拼接字符后長度:398 耗時(shí):53127
反序列化耗時(shí):5412019
拆字符串耗時(shí):527950

結(jié)果:
1、速度方面,拼接字符串速度是序列化的500-1000倍。拆分字符串是反序列化的8倍左右。
2、大小方面。數(shù)據(jù)小的序列化的體積小,數(shù)據(jù)大了以后,字符串拼接有優(yōu)勢;
3、上面結(jié)果數(shù)據(jù)事實(shí)上是不固定的,和詳細(xì)的數(shù)據(jù)有關(guān)。


結(jié)論:

網(wǎng)上的資料顯示。protocol buffer在序列化方面無論提交還是性能方面都是非常優(yōu)秀的,可是這里的測試結(jié)果顯示和字符串處理方式來比差距就太明顯了。

不要迷信,須要自己測試過才有體會(huì),有些場景。用字符串處理的方式比序列化的方式更有優(yōu)勢。消息中間件假設(shè)用字符串的方式來處理。性能應(yīng)該成倍增加。



版權(quán)聲明:本文博主原創(chuàng)文章,博客,未經(jīng)同意不得轉(zhuǎn)載。

轉(zhuǎn)載于:https://www.cnblogs.com/mfrbuaa/p/4914597.html

總結(jié)

以上是生活随笔為你收集整理的Google Protocol Buffers和java字符串处理控制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。