해결된 질문
작성
·
102
·
수정됨
0
질문은 총 2개 있습니다.
첫 번째 질문입니다.
FMemoryReader MemoryReaderAr(BufferArrayFromFile);
UStudent* StudentDest = NewObject<UStudent>();
StudentDest->Serialize(MemoryReaderAr);
다음 코드는 Serialize함수이지만 역질렬화을 하고 있다고 보면 될까요?
단순화시킨 Array<uint8> 타입의 BufferArrayFromFile 바이트스트림을
오브젝트 그래프(StudentDest)로 변환한다고 보면 될까요?
----------------------------------------------------------------------------------
두 번째는 질문이라기 보다는, 제가 제대로 이해한 게 맞는지 검토 한번 부탁드립니다.
오브젝트 그래프를 바이트 스트림으로 변환하는 작업은 직렬화 라고 한다. 따라서
오브젝트의 데이터를 바이트 스트림에 쓰는 Writer작업은 모두 직렬화를 위해 쓰인다.
2가지 케이스가 있다.
1).
TArray<uint8> BufferArray;
FMemoryWriter MemoryWriterAr(BufferArray);
StudentSrc->Serialize(MemoryWriterAr);
2).
FString JsonOutString;
TSharedRef<TJsonWriter<TCHAR>> JsonWriterAr =
TJsonWriterFactory<TCHAR>::Create(&JsonOutString);
FJsonSerializer::Serialize(JsonObjectSrc,JsonWriterAr);
반대로 바이트 스트림을 오브젝트 그래프로 변환하는 작업은 역직렬화 라고 한다. 따라서 오브젝트가
바이트 스트림의 데이터를 읽어오는 Reader작업은 모두 역직렬화를 위해 쓰인다.
2가지 케이스가 있다.
1).
TArray<uint8> BufferArrayFromFile;
( "" BufferArrayFromFile 이 파일 읽어오는 과정 생략 "" )
FMemoryReader MemoryReaderAr(BufferArrayFromFile);
UStudent* StudentDest = NewObject<UStudent>();
StudentDest->Serialize(MemoryReaderAr);
2).
FString JsonInString;
FFileHelper::LoadFileToString(JsonInString, *JsonDataAbsoultePath);
TSharedRef<TJsonReader<TCHAR>> JsonReaderAr =
TJsonReaderFactory<TCHAR>::Create(JsonInString);
TSharedPtr<FJsonObject> JsonObjectDest;
FJsonSerializer::Deserialize(JsonReaderAr, JsonObjectDest);
답변 1
0
네 별도의 함수 없이 Serialize 함수에서 직렬화, 역직렬화 기능을 수행합니다.
1번의 경우 이진 데이터를 사용하기에 용량을 아낄 수 있지만 범용적이진 않습니다.
2번은 웹 개발에서 많이 사용되므로 유용할 것 같아 예시를 넣었습니다.