सी ++ में आम दृष्टिकोण उन कार्यों को प्रदान करना है जो आपके कस्टम प्रकार को 'स्ट्रीम' ऑब्जेक्ट में क्रमबद्ध कर सकते हैं, और फिर स्ट्रीम में जमा किए गए डेटा ब्लॉक की शुरुआत में पॉइंटर प्राप्त करने का एक तरीका प्रदान करते हैं।
इस का एक सरल उदाहरण एसटीडी है :: ostringstream जो आप एक धारा में डेटा को क्रमानुसार और उसके बाद करने के लिए उपयोग कर सकते हैं का निर्माण स्ट्रिंग के लिए एक सूचक मिलती है:
int i = 13;
std::string message = "Hi";
std::ostringstream stream;
stream << i << message;
cout << stream.str() << endl; // prints "13Hi";
आप अपने Data
प्रकार के लिए एक ही कर सकता है में के रूप में <<
और >>
ऑपरेटर की उचित भार के, उपलब्ध कराने के द्वारा:
std::ostringstream &operator<<(std::ostringstream &stream, const Data &v) {
return stream << v.length << v.message;
}
std::ostringstream &operator>>(std::ostringstream &stream, Data &v) {
return stream >> v.length; >> v.message;
}
इन कार्यों का उपयोग करना, आप ऐसा कर सकता है:
0,123,
Data myData = { 13, "Hello" };
std::ostringstream stream;
stream << myData;
const std::string serializedData = stream.str();
send(.., serializedData.c_str(), serializedData.size() + 1, ..);
प्राप्त आकार पर, आप एक बफर में डेटा पढ़ सकता है और फिर एक std::istringstream
वस्तु का उपयोग फिर से डेटा निकालने के:
const char receivedData[ 1024 ];
// fill receivedData array using recv()
std::string s = receivedData;
std::istringstream stream(s);
Data myData;
stream >> myData;
आप से पढ़ने जब तक एक सा प्राप्त डेटा बफ़र की जरूरत हो सकती धारा सफल होती है।
स्रोत
2011-03-28 15:27:04
जिस विषय पर आप ठोकर खा रहे हैं वह "क्रमबद्धता" है, न कि encapsulation। – tenfour
+1 सी ++ तरीके से इसे कैसे करें इस पर उत्सुक है। आपको यह भी पूछना चाहिए कि क्या आपको एंडियन मुद्दों के बारे में चिंता करना है या नहीं। – Jeff