• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            3d Game Walkman

            3d圖形渲染,網(wǎng)絡(luò)引擎 — tonykee's Blog
            隨筆 - 45, 文章 - 0, 評論 - 309, 引用 - 0
            數(shù)據(jù)加載中……

            返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?

            雖然,網(wǎng)絡(luò)編程里面的數(shù)據(jù)傳送推薦用序列化,但我不用,還是選擇結(jié)構(gòu)體(返璞歸真),有以下幾點理由:
            1.跨平臺問題:
              序列化確實可以很好的跨語言平臺,可大多數(shù)網(wǎng)絡(luò)游戲不需要跨語言平臺

            2.別以為有了序列化就不需要結(jié)構(gòu)體
              表面上序列化代碼量小,按順序讀和寫char int short LPCSTR ... 就好,邏輯對象寫不寫都無所謂,那就是大錯而特錯了
              待序列化的對象發(fā)送前的結(jié)構(gòu)還是不可省略的序列化的過程就是 object->(按一定順序拆分)write->bytes->(按拆分順序組裝)read->object的過程
             其實object還是不能省略,很多人寫網(wǎng)絡(luò)程序不注重邏輯對象結(jié)構(gòu),收到的一堆bytes按一定順序讀和寫就完事了,這樣雖然靈活,但缺乏結(jié)構(gòu),容易造成混亂,調(diào)試起來是災(zāi)難
               所以結(jié)構(gòu)體(或類)還是省略不了的,所以:別以為有了序列化,就不需要結(jié)構(gòu)體了。

            3.結(jié)構(gòu)體存在內(nèi)存對齊和CPU不兼容的問題,可以避免
              的確結(jié)構(gòu)體是有內(nèi)存對齊的問題,存在兼容性問題,我可以選擇pack(1)把內(nèi)存對齊給關(guān)閉掉,避免兼容性問題,既然選擇了iocp就不打算跨平臺了,可以避免結(jié)構(gòu)體平臺兼容的問題

            4.結(jié)構(gòu)體調(diào)試起來方便很多,減少內(nèi)存拷貝,效率高
              不用序列化可write和read的過程就不需要過多考慮(少寫太多代碼了),read write 就好像現(xiàn)代社會每個人每天都要穿衣服和脫衣服一樣,原始社會需要嗎?其實人類進化到原始裸奔狀態(tài)才是最爽快的:)
              但還是要說句公道話:有人說序列化編碼解碼read write 需要耗費資源, 誠然這個過程基本等于賦值和內(nèi)存拷貝,那點效率損失主要還在內(nèi)存拷貝上,這點效率損失很小,不能作為序列化的缺點,當然如果涉及到數(shù)據(jù)加密那將是另外一個話題

            5.結(jié)構(gòu)體貌似呆板,發(fā)送數(shù)據(jù)限制多,發(fā)送變長數(shù)據(jù)就不方便,數(shù)據(jù)組織起來也不靈活
              我想這是很多人拋棄結(jié)構(gòu)體,選擇用序列化方式發(fā)送和接受數(shù)據(jù)的一個很重要的原因
              但:其實對于變長結(jié)構(gòu)(子結(jié)構(gòu)也是變長)的問題,用結(jié)構(gòu)體來實現(xiàn)的確很麻煩,但并不代表不能實現(xiàn)
              我已經(jīng)實現(xiàn)了,而且讀和寫變長子結(jié)構(gòu)體嵌套任意多層都不成問題,可以存儲復雜變長的數(shù)據(jù)結(jié)構(gòu),
              數(shù)據(jù)就如同能自動序列化一樣方便,這個應(yīng)該是技術(shù)難點,但細心去做是可以實現(xiàn)的

            6.關(guān)于結(jié)構(gòu)體指針
              游戲里面要發(fā)送的數(shù)據(jù)內(nèi)存事先分配好的,不存在指針,深度復制更不用考慮,所以內(nèi)存拷貝不會出錯
              如果用到指針即使用序列化來實現(xiàn)也會面臨同樣的問題也占不了多少便宜,由于C++這們語言的特點,
              不象java那樣有個標準實現(xiàn),對于序列化本身沒有一個統(tǒng)一的標準,所以可想而知,有人說:boost有它的序列化的實現(xiàn)
              其實那個實現(xiàn)不見得就合適你自己,如果真要做序列化,編碼和解碼的仿照那個過程自己寫才最為牢靠,
              哪些指針對應(yīng)的內(nèi)存需要序列化那些不需要序列化,是個邏輯結(jié)構(gòu),需要自己說了算才好(好像扯遠了點)
              說回游戲數(shù)據(jù),既然不用需要他用到指針,結(jié)構(gòu)體用來發(fā)送數(shù)據(jù)也沒問題的

            7 平臺擴充問題
              退一萬步的說:換了語言就基本上換了客戶端,客戶端的數(shù)據(jù)組織形式都要重寫
              實在不行還可以考慮用xml json 編碼等等一些跨平臺的解決方案,現(xiàn)在所寫的結(jié)構(gòu)體是可以用來做數(shù)據(jù)接收的,只是發(fā)送的不再是結(jié)構(gòu)體而已

            8.綜上所述
              如果需要跨語言平臺,不用序列化(二進制流或xml, json文本等等)根本無法實現(xiàn)
              序列化的優(yōu)點還是非常多的.如果主要是跨平臺和語言自定義讀寫規(guī)則,根據(jù)需要讀寫對象的某一部分數(shù)據(jù),
              空間浪費少,不存在內(nèi)存對齊問題等諸多優(yōu)點,缺點就是拐彎抹角,代碼量大,調(diào)試不方便


            權(quán)衡了良久
              數(shù)據(jù)如果能組織的合理,而且沒有跨語言平臺的要求,用結(jié)構(gòu)體也未嘗不可,畢竟數(shù)據(jù)發(fā)送直來直去還是方便些,減少內(nèi)存拷貝,效率也高了很多
              特別是調(diào)試起來容易太多了,衡量利弊我還是放棄了序列化,選擇了原始的結(jié)構(gòu)體,只是難在數(shù)據(jù)的組織(好在基本已經(jīng)克服了)

            我知道:序列化很好很強大,很多網(wǎng)絡(luò)程序高手根本不屑于直接發(fā)一個邏輯結(jié)構(gòu)體,用這種方式就好象是旁門左道,狗肉上不了大雅之堂一樣,狗肉還是很多人喜歡吃的嘛,:)。

            我還是返璞歸真選擇了結(jié)構(gòu)體

            一句話:物盡其用,用的恰當,夠用就好。

            如果有什么不對,敬請拍磚,莫要客氣

            posted on 2008-02-17 12:53 李侃 閱讀(8251) 評論(30)  編輯 收藏 引用 所屬分類: 網(wǎng)絡(luò)模塊

            評論

            # re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復  更多評論   

            缺點就是拐彎抹角,代碼量大?
            我的結(jié)論恰恰相反, 使用序列化的最大好處是簡化編程, 以及將來的可擴展性,
            至于調(diào)試, 對于這種網(wǎng)絡(luò)程序,如果再加上多線程,是很難調(diào)試的,而這種你所說的結(jié)構(gòu)體簡直是bug的溫床, 所以為了保證可靠性,一般都是用命令錄制回放來進行測試的.
            2008-02-17 13:48 | eXile

            # re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復  更多評論   

            只要封裝的好,怎么會是BUG的溫床呢?
            我的結(jié)構(gòu)體測試過了,作為容器,內(nèi)部嵌套子容器,再套N個變長結(jié)構(gòu)體或子結(jié)構(gòu)體都沒問題,比序列化方便多了。

            因為有了這個實現(xiàn),我才有這個底氣寫這篇文的,要不然我早用傳統(tǒng)方式了
            2008-02-17 14:38 | 李侃

            # re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復  更多評論   

            呵呵, 那就具體探討一下, 比如發(fā)送一個用戶名列表, 這是一個字符串的容器, 用序列化大致實現(xiàn)起來就是以下樣子:
            std::vector<std::string> user_names;
            archive ar;
            if (ar.serialize(user_names)) socket.send(ar.data(), ar.size());

            不知道你是怎么實現(xiàn)的, 歡迎探討.
            2008-02-17 15:52 | eXile

            # re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復  更多評論   

            CollectionPack collection;

            StringPack p1;
            strcpy(p.buffer, "jack");

            StringPack p2;
            strcpy(p2.buffer, "cat");

            collection.appendPack(p1);
            collection.appendPack(p2);

            socket.send(collection, collection.size());

            遍歷collection代碼大致如下:

            void visttest(CollectionPack * c)
            {
            BasePack *p = 0;
            while(c->next(&p))
            {
            if(p->type==ROLESIMPLEINFO_PACK)
            {
            RoleInfoSimplePack * aaa = (RoleInfoSimplePack *) p;
            printf("%s \r\n", aaa->username);
            } else if(p->type==LOGIN_PACK)
            {
            LoginPack * aaa = (LoginPack *) p;
            printf("%s \r\n", aaa->username);
            } else if(p->type == STRING_PACK)
            {
            StringPack *aaa = (StringPack *) p;
            printf("%s \r\n", aaa->buffer);
            }
            else if(p->type == COLLECTION_PACK) //帶嵌套的COLLECTION_PACK
            {
            CollectionPack *t=(CollectionPack *)p;
            visttest(t); //遞歸方式
            // return;
            }
            }
            }
            2008-02-17 17:14 | 李侃

            # re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?[未登錄]  回復  更多評論   

            扯什么蛋
            序列化局部上還是結(jié)構(gòu)體。
            有什么區(qū)別。
            2008-02-17 17:23 | 小白

            # re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?[未登錄]  回復  更多評論   

            我覺得沒事干的話,最好寫一些有技術(shù)含量的東西。。。。
            2008-02-17 17:24 | 小白

            # re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復  更多評論   


            object->(按一定順序拆分)write->bytes->(按拆分順序組裝)read->object

            這才是序列化,和結(jié)構(gòu)體直接發(fā)送的區(qū)別你都不知道?

            樓上的正如你的名字“小白”一個
            2008-02-17 17:29 | 李侃

            # re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復  更多評論   

            其實你的設(shè)計就是最簡單的序列化實現(xiàn).
            不過用較好的序列化庫對于接收時就簡單多了:

            std::vector<std::string> user_names;
            in_archive ar(received_data, received_size);
            if (ar.serialize(user_names)) visit(user_names);

            在serialize函數(shù)里包含了各種異常情況處理, 比如錯誤的數(shù)據(jù), 字符串長度異常,而像你的要完全自己處理, 那太復雜了, 這正是我所說的容易產(chǎn)生bug的地方.
            2008-02-17 18:16 | eXile

            # re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復  更多評論   

            結(jié)構(gòu)體還是序列化
            不是一個概念.
            2008-02-17 18:19 | WXX

            # re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復  更多評論   

            @WXX
            其實lz所說的結(jié)構(gòu)體指的把網(wǎng)絡(luò)數(shù)據(jù)看作是POD數(shù)據(jù)類型來處理, 這樣來簡化處理過程(當然在我看來, 這只能把處理過程搞得更復雜), 而序列化把網(wǎng)絡(luò)數(shù)據(jù)看作二進制流或文本流. 從這個角度來談?wù)撨@個問題的.
            2008-02-17 18:51 | eXile

            # re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復  更多評論   

            我得要把標題改一下才好。

            網(wǎng)絡(luò)數(shù)據(jù),以結(jié)構(gòu)體的方式直接傳送還是轉(zhuǎn)化成特定字節(jié)順序形式來傳送。
            我當然知道傳統(tǒng)方式是采用樓上的方法。我只是想打破常規(guī)。

            我的出發(fā)點是想自定義一個容器,相當于一個SmartStruct能裝下各種各樣的東西,其實這本身就相當于在序列化了,只是和復雜的序列化過程還是有些的差異而已
            說來說去就是數(shù)據(jù)的字節(jié)組織形式是按原樣收發(fā),還是變個特定順序收發(fā)
            真不好意思,這篇文章確實是有些小小的混淆概念。



            至于eXile 所說,數(shù)據(jù)驗證這些目前還沒有去考慮
            2008-02-17 19:09 | 李侃

            # re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復  更多評論   

            最好的方法還是模擬rpc的解決方案,利用idl解析器自動生成序列化,只是這需要用lex/yacc方面的咚咚,
            tao,ice等都有原代碼可借鑒。
            2008-02-18 17:32 | 游客

            # re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復  更多評論   

            簡單的結(jié)構(gòu)是可以,如果結(jié)構(gòu)中有指針呢?或者有帶虛函數(shù)的object呢?
            2008-02-18 18:00 | giscn

            # re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復  更多評論   

            游戲里面發(fā)送的數(shù)據(jù),并不需要包含指針和虛函數(shù)的vtable,所以我才敢這樣去做,僅僅是針對游戲數(shù)據(jù)通訊的需求而已。

            不過這幾天,再三思量,看來不能圖一時痛快,太早這樣斷言
            我的做法,前人應(yīng)該也用過,目前可能夠用,將來也未必如此。

            為了擴展性和高質(zhì)量的代碼,我現(xiàn)在試試用自定義序列化的方式來做。
            這兩天認真閱讀了看了前人寫的一些服務(wù)器端的代碼,感受頗多

            只是覺得最大的問題是為了要提高效率還得要盡可能減少內(nèi)存拷貝和動態(tài)內(nèi)存的創(chuàng)建和銷毀這也是個挑戰(zhàn)。如果搞的不好,看似強大的序列化過程在負載嚴重的服務(wù)器上就沒效率可言了。

            我之前面的做法雖然不優(yōu)雅,但讀數(shù)據(jù)就是對象,少了解碼就不存在內(nèi)存拷貝的過程了,也無需額外再去創(chuàng)建一個對象,效率方面應(yīng)該是很高的

            所以...,還是想再好好想想一個折中的方案,結(jié)合各自的優(yōu)點。

            2008-02-19 08:41 | 李侃

            # re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復  更多評論   

            如果沒有指針和vtable, 兩者的差別也不是特別大了,傳結(jié)構(gòu)體是可行的,你后面所說的如何減少動態(tài)創(chuàng)建和銷毀開銷確實是要點,也有辦法解決。

            折中的辦法已經(jīng)有啊:用序列化的語義,內(nèi)部直接傳內(nèi)存塊
            2008-02-19 10:05 | giscn

            # re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復  更多評論   

            跨機器傳object始終都要用一種序列化的方式,直接傳內(nèi)存塊只是實現(xiàn)細節(jié),方法之一。你說的SmartStruct應(yīng)該是一種OO的思路,基本的Object 就可作為SmartStruct,但這樣做避免不了new delete, 如果將smartStruct 設(shè)計成union, 很顯然局限性很大。傳統(tǒng)的C語言的做法最直接,只要將繁瑣的switch去掉即可
            2008-02-19 10:21 | giscn

            # re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復  更多評論   

            用序列化的語義,內(nèi)部直接傳內(nèi)存塊?

            是不是:接收數(shù)據(jù)的時候,省略掉重新組裝成對象這一步?這也是個思路

            效率是高了,只是缺少了最終接收的對象,以字節(jié)的方式處理字節(jié)塊的語意的邏輯就不很直觀了,也是件繁瑣的事情。
            2008-02-20 23:32 | 李侃

            # re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復  更多評論   

            這兩天,我把序列化的庫重新寫了一遍,已經(jīng)能支持基本數(shù)據(jù)類型,字符串和Stl的list vector set map 等等了...方便是方便,但想想,還是存在上面的問題,最終接收成對象的時候,少不了分配內(nèi)存(創(chuàng)建對象) -> 數(shù)據(jù)拷貝->處理對象->釋放對象 (我想這是個可能會成為將來的一個性能瓶頸),對此我真的是耿耿于懷

            如果直接去處理語意的內(nèi)存塊,真的又很是麻煩。
            2008-02-20 23:38 | 李侃

            # re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復  更多評論   

            數(shù)據(jù)拷貝是不可避免的,而且一般對效率影響不大,主要還是內(nèi)存管理上作一些優(yōu)化,比如使用內(nèi)存池。
            2008-02-20 23:38 | eXile

            # re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復  更多評論   

            恩,也是,最重要的是要找到重大的性能的瓶頸在哪里,也許我想太多了。
            明天我再從群里找?guī)讉€人來幫我看看這個帖,希望能多些經(jīng)驗方面的交流
            2008-02-20 23:54 | 李侃

            # re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復  更多評論   

            按需編程
            結(jié)構(gòu)體,簡單快速
            序列化,需要寫序列化代碼, 效率也不差
            還有另外一種, 就是簡單重新計算一下長度,
            對于只有最后一個變長的包, 這樣又快又簡單

            簡單寫個例子:
            pk1
            {
            int a;
            }

            pk2
            {
            int a;
            int b_len;
            char b[10000];
            }

            pk3
            {
            AA a; //AA是復雜的變長因素類
            }

            pk1適合于結(jié)構(gòu)體傳送
            pk2適合于改變一下包長度
            pk3適合于序列化

            那不如稍加改造
            pk1
            {
            int a;
            }

            pk2
            {
            int a;
            int b_len;
            char b[10000];
            int GetLength()
            {
            return sizeof(*this) - sizeof(b) + b_len;
            }
            }

            pk3
            {
            AA a; //AA是復雜的變長因素類
            void Serialize(Stream& s);
            bool DeSerialize((Stream& s);
            }

            那么發(fā)消息函數(shù)為
            template<T>
            SendMsg (T* pkt)
            {
            __if_exist(T::Serialize)
            {
            Stream a;
            pkt->Serialize(&a);
            Send(a->GetBuffer(), a->GetBufferLength());
            }
            __if_not_exist(T::Serialize)
            {
            __if_exist(T::CalcLength)
            {
            Send(Pkt,pkt->GetLength());
            }
            __if_not_exist(T::CalcLength)
            {
            Send(Pkt, sizeof(T));
            }
            }
            }
            接受的時候反序列化就不寫了, 類似的

            這樣不是又快有簡單嗎?
            2009-01-11 13:06 | llxisdsh

            # re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復  更多評論   

            補充一下:
            上面的
            Stream a;
            可以寫成靜態(tài)變量 或者 線程靜態(tài)變量, 這樣就沒有構(gòu)建開銷了

            2009-01-11 13:21 | llxisdsh

            # re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復  更多評論   

            如何方便健壯就怎么寫,各有優(yōu)缺,權(quán)衡不宜罷了.
            2009-01-17 17:35 | timlly

            # re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復  更多評論   

            這帖子快一年了,回頭看看,還真是感觸頗多啊
            后來我還是自己寫了一套序列化的庫,完全支持stl + zlib字節(jié)壓縮的的序列化庫,最終還是沒有采用結(jié)構(gòu)體的方式

            自己寫的這套庫工作了很久了,也是我的IO和網(wǎng)絡(luò)流的底層,用起來還是很方便的,足夠了
            2009-01-18 10:55 | 李侃

            # re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復  更多評論   

            隨便搜索看到的這個文章,本意是想找個 Java CLIENT 和 C++服務(wù)端(使用結(jié)構(gòu)體) 的 通信解決方案。

            我都不明白,你們?yōu)槭裁丛诳紤] 什么 效率??你們明白效率的 瓶頸在什么地方???難道你的效率 瓶頸不在 網(wǎng)卡處理能力,不在使用的網(wǎng)絡(luò)帶寬,反而在 內(nèi)存上面???難道你的效率 是 SBB 的使用 單機完成的???高流量的應(yīng)用,哪一個不是 分布式,冗余式??在 基礎(chǔ)編程 水平一致的情況下。。你損失的那么點內(nèi)存效率。。算什么,性能能相差多少??

            搞不懂,程序是 人寫的,是給人用的。不去講究 快速開發(fā),不去講究 調(diào)試靈活,不去考慮設(shè)計是否能 迅速的在需求改變的時候 進行調(diào)整。不去考慮穩(wěn)定性。偏偏非得考慮 雜七雜八的莫名其妙的因素。。

            你可能有很好的編程水平。不過,你不是一個好的程序員。因為你考慮的方向錯誤了。而沒有正確思維方式去寫程序,充其量只是說是一個 高級碼工。
            2009-11-25 12:00 | XXXMAN

            # re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復  更多評論   

            我也認為使用結(jié)構(gòu)體傳輸不錯。
            2010-01-16 19:28 | KongQue

            # re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復  更多評論   

            將數(shù)據(jù)包序列化后,怎么知道序列化后的長度。接收方有可能遇到粘包問題,怎么解決呢?是不是發(fā)送方在發(fā)送序列化數(shù)據(jù)之前還要在做些處理?
            2010-06-13 22:04 | JustCodeIT

            # re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?[未登錄]  回復  更多評論   

            XXXMAN 就是一個2B
            2010-07-14 16:35 | TH

            # re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復  更多評論   

            小弟看了上面各位大蝦的評論,受益匪淺.但是我還是想不明白,如果按樓主說,只是為了效率,為什么在游戲中定義對像呢,直接用原始結(jié)構(gòu)體+函數(shù)效率此不是很好,本人覺得效率是重要,但維護更重要的.
            2010-10-10 22:45 | 傾風

            # re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?[未登錄]  回復  更多評論   

            誤人子弟。你不手動序列化但實現(xiàn)了ISerializible的對象在網(wǎng)絡(luò)傳輸時還是會自動序列化的。比如在使用webservices數(shù)據(jù)傳輸時,大數(shù)據(jù)量的數(shù)據(jù)在手動序列化后的傳輸效率要比自動序列化快很多。
            2011-06-30 10:23 | yuan
            久久免费99精品国产自在现线 | 久久99国产精品成人欧美| 免费精品久久天干天干| 久久一区二区三区99| 久久久久这里只有精品| 国产一区二区精品久久岳| 亚洲综合久久综合激情久久| 精品乱码久久久久久久| 精品久久久无码人妻中文字幕豆芽 | 久久久女人与动物群交毛片| 亚洲∧v久久久无码精品| 亚洲精品无码成人片久久| 色综合久久中文字幕无码| 日韩精品无码久久久久久| 久久久久久久久无码精品亚洲日韩 | 狠狠88综合久久久久综合网| 久久九九青青国产精品| 99久久国产综合精品网成人影院 | 成人亚洲欧美久久久久| 久久天天躁狠狠躁夜夜2020| 欧美一区二区久久精品| 久久精品日日躁夜夜躁欧美| 99久久99久久久精品齐齐| 久久高潮一级毛片免费| 国产精品一区二区久久精品涩爱| 久久综合精品国产二区无码| 激情伊人五月天久久综合| 久久激情五月丁香伊人| 久久这里只有精品首页| 久久国产精品成人免费| 国产精品成人久久久| 久久精品成人免费网站| 国内精品久久久久影院薰衣草| 国产亚洲欧美成人久久片 | 性高湖久久久久久久久| 狠狠色丁香婷婷综合久久来来去| 亚洲精品tv久久久久久久久| 精品无码久久久久久久动漫| 久久国产精品无码HDAV| 一个色综合久久| 久久99国产精品成人欧美|