나는 네트워크를 통해 데이터를 송수신해야하는 프로그램을 만들고 있습니다. 나는 객체 직렬화를 결코 다루지 않았다. Boost 및 Google 프로토콜 버퍼에 대한 몇 가지 권장 사항을 읽었습니다. Linux에서 사용하는 것이 가장 좋습니다.Linux 용 C++ 객체 직렬화
다른 사람을 알고 계시다면 협조 해 주셔서 감사합니다.
감사합니다.
나는 네트워크를 통해 데이터를 송수신해야하는 프로그램을 만들고 있습니다. 나는 객체 직렬화를 결코 다루지 않았다. Boost 및 Google 프로토콜 버퍼에 대한 몇 가지 권장 사항을 읽었습니다. Linux에서 사용하는 것이 가장 좋습니다.Linux 용 C++ 객체 직렬화
다른 사람을 알고 계시다면 협조 해 주셔서 감사합니다.
감사합니다.
Boost.Serialization을 사용하여 객체를 직렬화하고 소켓을 통해 전송했습니다. 그것은 당신이 그들을
class Foo
{
public:
template<class Archive>
void serialize(Archive& ar, const unsigned int version)
{
ar & _foo;
ar & _bar;
}
int _foo;
int _bar;
};
또는 비 간섭 적에 액세스 할 수있는 경우 당신이
namespace boost {
namespace serialization {
template<class Archive>
void serialize(Archive& ar, Foo& f, const unsigned int version)
{
ar & f._foo;
ar & f._bar;
}
} // namespace serialization
} // namespace boost
를 직렬화하는 데 필요한 개체에 액세스 할 수없는 경우 객체를 간섭 직렬화 할 수있는, 매우 유연한 도서관의 (_foo
및 _bar
여기에) 노출되지 않으면 Foo를 직렬화하는 트릭입니다. documentation은 이것을 아주 잘 설명합니다. Foo
을 serialize하려면 boost::archive
네임 스페이스의 개체 (텍스트, 이진 또는 xml)를 사용합니다. 당신은 당신이 소켓과 버퍼를 사용하게 될 네트워크를 도입 할 때 푸 객체에 아카이브를 재구성
std::stringstream ss;
boost::archive::text_oarchive ar(ss);
Foo foo;
foo._foo = 1;
foo._bar = 2;
ar << foo;
분명이 예는 매우 간단하다 그래서
boost::archive::text_iarchive ar(ss);
Foo foo
ar >> foo;
주처럼 수행하고있다.
도움에 감사드립니다. 나는 시도 할 것이다. –
@ 루카스 당신의 질문에 답을 얻었을 때 대답 중 하나를 받아 들여야합니다. –
네트워크를 통해 데이터를 전송하는 경우 XML이 아닌 이진 형식의 직렬화를 사용하는 것이 좋습니다. Qt offers classes for that을 사용하면 Qt의 메타 시스템에 알려진 클래스를 데이터 스트림으로 전달할 수 있습니다.
문제는 C++이 언어 기능으로 인트로 스펙 션을 실제로 지원하지 않기 때문에 직렬화 할 데이터를 알아야한다는 것입니다.
대부분의 경우 길이 표시기 (빅 엔디안 사용) 다음에 데이터가 데이터를 직렬화하는 좋은 방법입니다.
이 질문의 가능한 복제본은 무엇입니까? http://stackoverflow.com/questions/1855628/network-protocol-object-serialization-in-c – bjg
특정 요구 사항을 모른 채 어떻게 * 최선 *을 결정할 수 있습니까? –