সি ++ এ সিরিয়ালাইজেশনের জন্য ভাল সমাধানগুলি কী কী? [বন্ধ]


18

আমি আগ্রহী যে সমাধান গেম ডেভেলপাররা তাদের গেমগুলির জন্য বিভিন্ন ধরণের ডেটা সিরিয়ালাইজ করার জন্য কী নিয়ে এসেছিল। আপনি কি ছেলেরা কিছু মনোলিথিক গেম অবজেক্ট হায়ারার্কি ব্যবহার করেন যা উত্পন্ন ধরণের জন্য সিরিয়ালাইজেশন ইন্টারফেস রাখে, কাস্টম আরটিটিআই-ভিত্তিক সমাধানের ধরণের ব্যবহার করে, নির্দিষ্ট শ্রেণীর জন্য সুস্পষ্ট স্ট্রিম সিরিয়ালাইজেশন সম্পাদন করে, বা কিছু ওপেন সোর্স সমাধান (বুস্ট :: সিরিয়ালাইজেশন, এস 11 এন, ইত্যাদি)।


1
আমি মনে করি গেম ডেভেলপমেন্ট প্রোগ্রামিংয়ে সিরিয়ালাইজেশন একটি গুরুত্বপূর্ণ বিষয়, তবে আমি এই প্রশ্নটি পছন্দ করি না। আপনি কি করতে চেষ্টা করছেন? আপনি কোন নির্দিষ্ট সমস্যাগুলি সমাধান করার চেষ্টা করছেন? তার পরিবর্তে, আমি এটিকে একটি সম্প্রদায় উইকিতে রূপান্তরিত করেছি যাতে এটি আরও আলোচনার ফর্ম্যাট।
টেট্রাড

আমি মনে করি এটির জন্য কিছু বিন্যাস প্রয়োগ করা ভাল হবে, (আলা সংস্করণ নিয়ন্ত্রণ প্রশ্ন)।
জেসি ডর্সি

উত্তর:


9

গুগল থেকে প্রোটোকল বাফারগুলি সি ++ অবজেক্টকে সিরিয়ালাইজ করার জন্য খুব ভাল পদ্ধতির হতে পারে। সিরিয়ালাইজেশন প্রক্রিয়ার অংশ হিসাবে আপনাকে কিছু মধ্যবর্তী বস্তু তৈরি করতে হতে পারে তবে এটি অনেক প্ল্যাটফর্ম এবং ভাষা জুড়ে কাজ করে।


1
আমি এটি ব্যবহার করছি এবং আপনি যদি আপনার বিল্ড সিস্টেমে কোড জেনারেশনটি স্বয়ংক্রিয় করতে পারেন তবে এটি সহজ। যদিও সত্যিই দুর্দান্ত সুবিধাটি হ'ল এটি আপনাকে প্ল্যাটফর্মটি ব্যবহার না করেই দূরবর্তী ম্যাচনিগুলিতে ডেটা স্থানান্তর করতে দেয় এবং এটির জন্য এটি অনুকূলিত হয় যাতে উত্পন্ন জিনিসগুলি বড় না হয়।
ক্লাইম

10

আমরা আমাদের গেমগুলিতে কেবল বুস্ট.সারিলাইজেশন ব্যবহার করি , এটি ব্যবহার করা সহজ এবং খুব দ্রুত, তবে এটি আমার মতে সেভগেমগুলির জন্য কার্যকর। আপনি যদি অক্ষর তৈরির চেষ্টা করেন তবে আমি আপনাকে XML'ish বা JSON ভিত্তিক জিনিসগুলির প্রস্তাব দিই, কারণ এডিটর না থাকলেও সেগুলি পড়া সহজ এবং সম্পাদনাযোগ্য।


আমি বুস্ট :: ক্রমিক ক্লায়েন্ট / সার্ভার যোগাযোগের জন্যও সফলভাবে ব্যবহৃত সিরিয়ালাইজেশন দেখেছি। যাইহোক, এএফএআইকি এটি স্ট্রিম-ভিত্তিক, সুতরাং এটি ঠিক সংস্করণ সহনীয় নয়। এটি ক্লায়েন্ট / সার্ভার যোগাযোগের জন্য ডিল-ব্রেকার নাও হতে পারে, তবে আপনি যদি সেভ করা গেমসের জন্য এটি ব্যবহার করেন, তবে গেমের ডেটা স্ট্রাকচারে কোনও পরিবর্তন পুরানো সংরক্ষিত গেমগুলি ভার্চুয়াল অসম্ভবতা লোড করে তোলে (পুরানো অবজেক্ট ভার্সন লোড করার জন্য সমর্থন একটি আসল কাজ হয়ে যায় )।
মাইক স্ট্রোবেল

2
@ মাইকস্ট্রোবেল আমি সম্প্রতি কয়েকটি সিরিয়ালাইজেশন এবং জসন কিট পর্যালোচনা করে এই মন্তব্যটি দেখতে পেয়েছি। boost :: সিরিয়ালাইজেশন স্পষ্টভাবে সংস্করণ সমর্থন করে। সিরিয়ালাইজ কলগুলি একটি সংস্করণ নম্বর পেতে পারে এবং তারপরে এটি বেসিক ব্রাঞ্চিং লজিক (যদি (সংস্করণ> 1.0) ... বাস্তবায়িত করে তবে ব্যবহারকারীদের উপর নির্ভর করে। সামগ্রিকভাবে বেশ শক্তিশালী বলে মনে হচ্ছে।
এম 2 টি এম

লজ্জাজনকভাবে এটি কাস্টম বরাদ্দকারী / মুছক সমর্থন করে না বলে মনে হচ্ছে।
জেমসএএমডি

1
আমি সেরিয়ালাইজেশন থেকে সিরিয়ালে বুস্ট করেছি। বন্দরটি উল্লেখযোগ্যভাবে মসৃণ ছিল । এটি একটি মোহন মত কাজ করে। সিরিয়াল এক্সএমএল, জসন, বাইনারি এবং পোর্টেবল বাইনারি সমর্থন করে । আমি সিরিয়ালে পোর্ট করার কারণটি সর্বশেষ ছিল। আমার পোর্টেবল বাইনারি সংরক্ষণাগারগুলির প্রয়োজন ছিল কারণ আমি এমন একটি সার্ভার চালাই যা ক্লায়েন্টগুলি (বর্তমানে একটি ম্যাক, শীঘ্রই আইওএস এবং অ্যান্ড্রয়েড) সংযুক্ত রয়েছে। আমি সিরিয়ালাইজেশন বৃদ্ধিতে বেশ খুশি ছিলাম তবে আমি মনে করি সিরিয়ালগুলির কিছু বৈশিষ্ট্য এটিকে আরও উন্নত উপায়ে আরও একধাপ এগিয়ে নিয়ে গেছে, যেমন উল্লিখিত পোর্টেবল বাইনারি সিরিয়ালাইজেশন। ভাষার ইন্টারপ প্রোটোকল বাফারগুলির জন্য এবং এটি আরও ভাল।
জার্মান ডায়াগো

প্রতি দস্তাবেজ বুস্ট.সিরিয়ালাইজেশন থ্রেড-নিরাপদ নয়। উভয়ই সিরিয়াল নয় যা একই জাতীয় এপিআই ব্যবহার করে।
হাই-এঞ্জেল

3

আমি বরং সিরিয়ালের জন্য জেএসএন পছন্দ করি। এটি পার্স করা খুব সহজ এবং এখানে বিনামূল্যে লাইব্রেরিগুলি পাওয়া যায় যেমন: http://jsoncpp.sourceforge.net/ আমি সি ++ তে কখনও বা উত্সাহ বা আরটিটিআইয়ের অনুরাগী হইনি। টিনিএক্সএমএল এক্সএমএল সিরিয়ালাইজেশন এবং ডেসারিয়ালাইজেশনের জন্যও ভাল কাজ করে। http://www.grinninglizard.com/tinyxml/ অবশেষে সিরিয়ালের জন্য আমার আর বেশি সময় ব্যয় করতে হবে না।


2

গুগল ফ্ল্যাটবফার্স জাভা এবং গো সমর্থন সহ সি ++ এর জন্য একটি কার্যকর ক্রস প্ল্যাটফর্ম সিরিয়ালাইজেশন লাইব্রেরি। এটি গুগলে বিশেষত গেম ডেভেলপমেন্ট এবং অন্যান্য পারফরম্যান্স-সমালোচনামূলক অ্যাপ্লিকেশনগুলির জন্য তৈরি করা হয়েছিল।

এটি অ্যাপাচি লাইসেন্স, ভি 2 এর অধীনে ওপেন সোর্স হিসাবে উপলব্ধ।



1

এক্সডিএস ঠিক এই উদ্দেশ্যে ডিজাইন করা হয়েছিল, এটি আপনাকে বিকাশের সময় এক্সএমএল এর সুবিধা এবং বিতরণের সময় একটি কমপ্যাক্ট বাইনারি উপস্থাপনার সুবিধা দেয়।


এক্সডিডিএস গুগল প্রোটোকল বাফার থেকে আলাদা করে তোলে তা আমি সত্যিই নিশ্চিত নই? তারা প্রথম লক্ষ্যটি ব্যতীত একই উদ্দেশ্যে কাজ করে বলে মনে হচ্ছে।
জ্যাকোমে

আপনি অবশ্যই এক্সএসডি মানে এক্সডিএস নয়? কোডynthesis.com/products/xsd তালিকাটি সম্পূর্ণ করার জন্য আমি এটি সম্পর্কে একটি উত্তর পোস্ট করতে চাই।
v.oddou

1

আপনি যদি লিনাক্স প্ল্যাটফর্মে থাকেন তবে আপনি সরাসরি json.hসিরিয়ালকরণের জন্য লাইব্রেরি ব্যবহার করতে পারেন । এখানে আমি আসা নমুনা কোড। সূত্র: জসন সিরিয়ালাইজার

//============================================================================
// Name        : JsonTest.cpp
// Author      : Manis Kumar Khedawat
//============================================================================

#include <iostream>
#include <json/json.h>

using namespace std;

struct objStruct{
    string str;
    int n1;
    int n2;
};

typedef objStruct obj;

void serializeToJson(json_object *jObj,obj* pObj)
{
    /*
    string str;
    int n1;
    int n2;
    */

    // Create json object for every member in struct Obj.

    json_object *jstr = json_object_new_string (pObj->str.c_str());
    json_object *jn1 =json_object_new_int(pObj->n1);
    json_object *jn2 =json_object_new_int(pObj->n2);

    // Add all above created object into jObj

    json_object_object_add(jObj,"str",jstr);
    json_object_object_add(jObj,"n1",jn1);
    json_object_object_add(jObj,"n2",jn2);

    // pObj is Serialzed into jObj
}

void deSerializeToJson(json_object *jObj,obj* pObj)
{
    /*
    string str;
    int n1;
    int n2;
    */

    // Get every member as different json obj from jObj
    json_object *jstr = json_object_object_get (jObj,"str");
    json_object *jn1 =json_object_object_get(jObj,"n1");
    json_object *jn2 =json_object_object_get(jObj,"n2");

    pObj->str=json_object_get_string(jstr);
    pObj->n1=json_object_get_int(jn1);
    pObj->n2=json_object_get_int(jn2);

    // jObj is DeSerialzed into pObj
}

int main() {
    // Lets Create an Object which we will serialze into Json
    obj obj1;
    obj1.n1=3;
    obj1.n2=6;
    obj1.str="This is String";

    // Create a json Object
    json_object* jObj=json_object_new_object();

    // To serialize into Json Object
    // Please Keep in mind , we are passing address of object (pointer) & not object
    serializeToJson(jObj,&obj1);

    obj obj2;
    // To serialize into Json Object
    // Please Keep in mind , we are passing address of object (pointer) & not object
    deSerializeToJson(jObj,&obj2);

    cout<<"String str == "<<obj2.str<<endl;
    cout<<"n1 & n2 : "<<obj2.n1<<" "<<obj2.n2<<endl;

    return 0;
}

0

জসনসিপি এবং প্রোটোকল বাফার উভয়ই ভাল বিকল্প। আমার জ্ঞানের ভিত্তিতে উভয়ই আপনাকে বাক্সের বাইরে সিরিয়াল গাছের কাঠামোর অনুমতি দিতে চলেছে (দয়া করে আমি ভুল হলে আমাকে সংশোধন করুন)। বুস্ট :: সিরিয়ালাইজেশন স্বেচ্ছাচারী গ্রাফগুলি পরিচালনা করতে পারে তবে জসসনের মতো সুন্দর পাঠ্য বিন্যাসটি নেই (আমি মনে করি একটি এক্সএমএল ফর্ম্যাট আছে)

ব্যক্তিগতভাবে আমি মনে করি যে জসন সিরিয়ালাইজেশনের জন্য দোজি যা গ্রহণ করেছে তা হল সেরা
http://docs.dojocampus.org/dojox/json/ref

আমি এটির নিজস্ব সংস্করণটি সি ++ তে জসনসিপি ব্যবহার করে তৈরি করেছি, এটি টাইপযুক্ত বস্তুগুলিকেও deserialize করবে (আমার সমস্ত ধরণের জন্য আমার বড় ধরণের কারখানা রয়েছে)। এটি আমাকে json ফাইলগুলির সংগ্রহ থেকে একটি দৃশ্য তৈরি করতে দেয় যা যেভাবেই হোক দয়া করে উল্লেখ করা যেতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.