직렬 화, 반 직렬 화 및 jsoncpp 학습
1. 서열 화 와 반 서열 화 는 무엇 입 니까?용도 가 뭐 예요?
대상 을 바이트 시퀀스 로 바 꾸 는 과정 을 대상 의 직렬 화 라 고 한다.바이트 서열 을 대상 으로 복원 하 는 과정 을 대상 의 반 서열 화 라 고 한다.1) 대상 의 바이트 시퀀스 를 하 드 디스크 에 영구적 으로 저장 하고 보통 파일 에 저장 합 니 다.2) 네트워크 에서 전송 대상 의 바이트 시퀀스.대상 의 직렬 화 는 주로 두 가지 용도 가 있다. 많은 응용 에서 특정한 대상 을 직렬 화 시 켜 메모리 공간 에서 벗 어 나 물리 하 드 디스크 에 입주 하여 장기 적 으로 저장 할 수 있 도록 해 야 한다.예 를 들 어 가장 흔히 볼 수 있 는 것 은 웹 서버 의 Session 대상 이다. 10 만 명의 사용자 가 동시에 방문 하면 10 만 개의 Session 대상 이 나타 날 수 있 고 메모리 가 견 딜 수 없 을 수도 있다. 그래서 웹 용 기 는 일부 seesion 을 먼저 하 드 디스크 에 직렬 화하 고 사용 하려 면 하 드 디스크 에 저 장 된 대상 을 메모리 에 복원 한다.두 프로 세 스 가 원 격 통신 을 할 때 서로 다양한 종류의 데 이 터 를 보 낼 수 있다.어떤 유형의 데이터 든 이 진 시퀀스 로 네트워크 에 전송 된다.발송 자 는 이 대상 을 바이트 시퀀스 로 바 꿔 야 네트워크 에서 전송 할 수 있다.수신 자가 대상 을 받 은 후 바이트 서열 을 해당 대상 으로 복원 하여 일부 조작 을 해 야 한다.이상 참조:http://www.cnblogs.com/xdp-gacl/p/3777987.html 《 자바 기초 학습 총 결 - 자바 대상 의 서열 화 와 반 서열 화 》 < 도도 늑대 >
2. 직렬 화 를 사용 하지 않 으 면 송신 단 과 수신 단 에서 직접 송신 대상 에 게 무슨 문제 가 발생 합 니까?
송신 단 과 수신 단 이 모두 c + + 로 작성 된다 면 송신 단 은 수신 단 에 구조 체 를 보 냅 니 다. 대상 은 다음 과 같 습 니 다.
struct args
{
long arg1;
long arg2;
}
args arg;
arg.arg1 = 1;
arg.arg2 = 2;
Writen(sockfd,&args,sizeof(args));
수신 단 코드:
struct args arg;
Readn(sockfd,&arggs,sizeof(args))
이렇게 쓰 면 무슨 문제 가 있 을까요?사실 상기 코드 에는 세 가지 잠재 적 인 문제 가 존재 합 니 다. (1) 서로 다른 실현 은 서로 다른 형식 으로 바 이 너 리 를 저장 합 니 다.가장 흔히 볼 수 있 는 것 은 바로 서로 다른 바이트 순서 문제 이다.어떤 기 계 는 큰 바이트 순 서 를 사용 하고, 어떤 기 계 는 작은 바이트 순 서 를 사용한다.(2) 서로 다른 실현 은 같은 C 데이터 형식 을 저장 하 는 데 차이 가 있 을 수 있다.예 를 들 어 대부분의 32 비트 유 닉 스 시스템 은 32 비트 를 사용 하여 긴 정 수 를 나타 내 고 64 비트 시스템 은 전형 적 으로 64 비트 를 사용 하여 같은 데이터 형식 을 나타 낸다.short, int 또는 long 등 정수 유형 에 대해 각자 의 크기 는 확정 적 인 보증 이 없다.(3) 서로 다른 실현 이 구조 체 에 포장 하 는 방식 에 차이 가 존재 하 는데 각종 데이터 유형 이 사용 하 는 자릿수 와 기계 의 정렬 제한 에 달 려 있다.따라서 크로스 소켓 전송 바 이 너 리 구 조 는 결코 현명 하지 않다.이상 에서 참고 한 5.18 절 에서 이러한 데이터 형식 문 제 를 해결 하 는 방법 은 지원 하 는 데이터 형식 을 정의 하 는 바 이 너 리 형식 (자릿수, 대형 또는 작은 바이트 순서) 을 표시 하고 이런 형식 으로 고객 과 서버 사이 에 모든 데 이 터 를 전송 하 는 것 이 며 직렬 화 는 모두 우리 에 게 이런 작업 을 도와 주 었 다.
3. 자주 사용 하 는 직렬 화 와 반 직렬 화 프로 토 콜
현재 유행 하 는 직렬 화 프로 토 콜 은 XML, JSON, Protobuf, Thrift 와 Avro 를 포함한다.구체 적 인 참고:http://tech.meituan.com/serialization_vs_deserialization. html < 직렬 화 와 반 직렬 화 > < 미 단 과학기술 >
4. 제 이 슨 소개
왜 제 이 슨 을 공부 합 니까?JSON 은 JavaScript 원생 형식 이기 때문에 json 을 사용 하여 웹 서버 와 전단 클 라 이언 트 가 통신 할 때 JavaScript 에서 JSON 데 이 터 를 처리 할 때 특별한 API 나 공구 꾸러미 가 필요 하지 않다 는 것 을 의미한다.json 문법http://www.json.org/json-zh.html
5. json 을 사용 하여 웹 서버 와 전단 통신
예 를 들 면:http://blog.csdn.net/sunny_ss12/article/details/46643307
6. jsconcpp
C + + 는 JSON 을 사용 하여 데 이 터 를 분석 하려 면 보통 jsoncpp 를 사용 합 니 다.(1) Liux 에서 컴 파일:https://github.com/open-source-parsers/jsoncpp jsconcpp 를 다운로드 하여 압축 을 풀 고 압축 해제 루트 디 렉 터 리 에 들 어가 참고 하 십시오.https://github.com/open-source-parsers/jsoncppjsoncpp 에 대한 jsoncpp 컴 파일
mkdir -p build/debug
cd build/debug
cmake -DCMAKE_BUILD_TYPE=debug -DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=OFF -DARCHIVE_INSTALL_DIR=. -G "Unix Makefiles" ../..
make
sudo make install
그리고 pkg - config / jsoncpp. pc. in 을 보면 jsoncpp 의 설치 디 렉 터 리 (2) doxygen 으로 jsoncpp 문 서 를 컴 파일 하 는 것 을 볼 수 있 습 니 다.
python doxybuild.py --doxygen=$(which doxygen) --open --with-dot
doxygen 이 / usr / bin 등 환경 변수 path 가 지정 한 디 렉 터 리 에 설치 되 어 있 으 면
--doxygen=$(which doxygen)
Graphiz 의 dot 명령 을 사용 하여 jsoncpp 의 함수 호출 도 를 생 성 할 수 있 습 니 다.그래서 문 서 를 컴 파일 하기 전에 Graphiz 를 설치 해 야 합 니 다.centos 실행 --with-dot
하면 됩 니 다.(3) 사용 방법: jsoncpp 를 정적 라 이브 러 리 libjsoncpp. a 로 컴 파일 하여 / usr / local / bin 에 넣 고 헤더 파일 은 / usr / local / include / json / 에서 프로 그래 밍 한 후 - ljsoncpp 를 사용 하여 libjsoncpp 를 연결 하면 됩 니 다.7. jsoncpp 예제 코드
예제 코드:http://www.cnblogs.com/kex1n/archive/2011/12/02/2272328.html < jsoncpp 의 사용 > < 작은 건물 하룻밤 봄비 듣 기 >http://blog.csdn.net/vagrxie/article/details/5754179 '데이터 / 설정 의 저장 방식 JSon 편 은 JSonCpp 라 이브 러 리 를 예 로 들 면', '구천 안 령 의 블 로그' 중 첫 번 째 글 이 자신의 블 로그 에 옮 겨 졌 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.