2010. 8. 12. 23:48

< 직 렬 화 >


프로세스의 정보들을 물리장치에 보관하는 등의 작업을 직렬화라고 함.

파일 , 소켓으로도 사용.


개체정보 -> 물리장치로 (직렬화)

물리적인 장치 -> 프로세스로 (역 직렬화)


ex)

*************************************************************************************

class stu

{

 const int num;

 char * name;

public :

 void Serialize(ofstream &of); // ofstream 출력 스트림. // 직렬화

 stu(ifstream &ifs)// 역직렬화를 제공 해야함(메소드가 존재하지 않음.)

 // 생성자의 시그니쳐가 stream 내부에 제공되어 있음.

private :

 int Read(ifstream &ifs);

}

//(ofstream,= ifstream).< (iofstream) < (fstream)

*************************************************************************************

ofstream of("data.txt"); // data.txt를 write 모드로 open 까지 해줌.

of.write(프로세서의 주소, 저장할 byte 수) //(저장할 variable, byte 수)

ex) a를 write 하면 a라는 객체와 동일한 객체를 복사할수있음.

of.close();

*************************************************************************************

직렬화를 하는 이유 - 역직렬화를 위해서.(개체정보를 저장했다가 다시 불러오기 위함.)

*************************************************************************************

stu::Serialize(ostream &of) // 이 코드가 있다는건 ofstream이 이미 열려있다는 전제.

{

 of.write(&num, sizeof(num));

 of.write(&name, sizeof(name)); // 이름 같은 경우 이름의 내용이 중요함.

 위의 내용을 of.write(name, strlen(name)+1);로 써야함.

 //이름은 용량이 얼마나 될지 모르는 가변적인 요소이기 때문에

 int len = strlen(name)+1;

 of.write(&len, sizeof(len));

 of.write(name, len);

 // 이렇게 써줄 경우의 예제는

 (27 , 6 , Hello) // 숫자 27을 받고 6칸의 배열공간을 만들고 Hello를 대입

 // 가변적인 요소는 저장해놓아야 함.

}

*************************************************************************************

// ex)생성자의 시그니쳐

stu::stu(ifstream &ifs) : num(Read(ifs)) // 리턴 결과가 num 과 같은 것이매개변수로..

{

 int len;

 ifs.read(&len, sizeof(len));

 name = new char[len]; // 포인터 자체는 storage 가 아님.

 ifs.read(name, len);

}

*************************************************************************************

ex) private 에 있는 Read 함수사용 예

int stu::Read(ifstream &ifs)

{

 int temp;

 ifs.read(&temp.sizeof(temp)); // num이 const 이기 때문에 이와같이 사용.

 return temp;

}

*************************************************************************************

ofstream, ifstream 을 사용하려면

#include <fstream>

using namespace std;

using std::ifstream;

using std::ofstream;

라고 명시를 해야 함. 하지 않을시엔 컴파일 오류가 발생함.

*************************************************************************************


'COMPUTER TECH > C, C++' 카테고리의 다른 글

피보나치 수열 작성  (0) 2010.08.12
동적 알고리즘 코딩자료  (0) 2010.08.12
직렬화  (0) 2010.08.12
배열  (0) 2010.08.12
자료구조 프로그래밍  (0) 2010.08.12
배열을 순차적으로 사용할 경우  (0) 2010.08.12
Posted by ... XJAPAN

댓글을 달아 주세요