인프런 커뮤니티 질문&답변

임동재님의 프로필 이미지

작성한 질문수

이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해

13강 언리얼 오브젝트 관리 I - 직렬화

13강 직렬화 관련 코드 질문이 있습니다.

해결된 질문

작성

·

96

·

수정됨

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번은 웹 개발에서 많이 사용되므로 유용할 것 같아 예시를 넣었습니다.