Serializacja w Cappuccino Framework

Serializacja w programowaniu komputerów proces przekształcania obiektów, tj. instancji określonych klas, do postaci szeregowej, czyli w strumień bajtów, z zachowaniem aktualnego stanu obiektu (…)

Serializacja służy do zapisu stanu obiektu, a później do odtworzenia jego stanu.

Źródło wikipedia: Serializacja

Serializacja

Deserializacja

Wnioski

Listing plików

AppController.j
@import <Foundation/CPObject.j> 
 
@import "Person.j"
 
@implementation AppController : CPObject 
{
	CPWebView webView;
	CPWebView _webView;
 
	CPProgressIndicator theProgressIndicator;
}
 
- (void)applicationDidFinishLaunching:(CPNotification)aNotification 
{
	var kowalski = [Person personWithName:@"Kowalski"]; 
	[kowalski setJobTitle:@"Inżynier" company:@"Nazwa firmy jest bardzo ÓŁĘĆŚ"]; 
 
	var data = [CPKeyedArchiver archivedDataWithRootObject:kowalski]; 
 
	console.log(@"kowalski:" + [kowalski description]); 
	// kowalski:name: Kowalski jobTitle: Inżynier company: Nazwa firmy jest bardzo ÓŁĘĆŚ
 
	console.log(@"[data string]: " + [data string]);
	// [data string]: 280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;6;PersonK;8;$classesA;S;6;PersonS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;4;nameD;K;6;CP$UIDd;1;3E;K;8;jobTitleD;K;6;CP$UIDd;1;4E;K;7;companyD;K;6;CP$UIDd;1;5E;E;S;8;KowalskiS;8;InżynierS;29;Nazwa firmy jest bardzo ÓŁĘĆŚE;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;
 
	console.log([data plistObject]);
	// objj_dictionary
 
	console.log(@"[[data plistObject] description]: " + [[data plistObject] description]);
	/* [[data plistObject] description]:
		CPDictionary {
			$version:100000
			$archiver:CPKeyedArchiver
			$objects:($null, CPDictionary {
				$classes:(Person, CPObject)
				$classname:Person
				},
				CPDictionary {
					company:CPDictionary {
						CP$UID:5
					}
					jobTitle:CPDictionary {
						CP$UID:4
					}
					name:CPDictionary {
						CP$UID:3
					}
					$class:CPDictionary {
						CP$UID:1
					}
				},
				Kowalski, Inżynier, Nazwa firmy jest bardzo ÓŁĘĆŚ)
			$top:CPDictionary {
				root:CPDictionary {
					CP$UID:2
				}
			}
		}
	*/
 
	console.log([[CPObject alloc] init]);
	// objj_object
 
	console.log([[[CPObject alloc] init] description]);  
	// <CPObject 0x00100b>
 
	console.log([data plistObject]);
	// objj_dictionary
 
 
 
	var newData = [CPData dataWithString:[data string]]; 
 
	var clone = [CPKeyedUnarchiver unarchiveObjectWithData:newData]; 
	console.log(@"clone:" + [clone description]); 
	// clone:name: Kowalski jobTitle: Inżynier company: Nazwa firmy jest bardzo ÓŁĘĆŚ
 
 
	// Gdy nie zostanie załączona klasa Person clone object będzie nil.
	var code = @"280NPLIST;1.0;D;K;4;$topD;K;4;rootD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;6;PersonK;8;$classesA;S;6;PersonS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;4;nameD;K;6;CP$UIDd;1;3E;K;8;jobTitleD;K;6;CP$UIDd;1;4E;K;7;companyD;K;6;CP$UIDd;1;5E;E;S;8;KowalskiS;8;InżynierS;29;Nazwa firmy jest bardzo ÓŁĘĆŚE;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;";
	code = [CPData dataWithString:code];
 
	var clone = [CPKeyedUnarchiver unarchiveObjectWithData:code]; 
	console.log(@"clone:" + [clone description]);
	// clone:name: Kowalski jobTitle: Inżynier company: Nazwa firmy jest bardzo ÓŁĘĆŚ
}
 
@end
Person.j
@implementation Person : CPObject 
{
	 CPString name;
	 CPString jobTitle;
	 CPString company;
}
 
+ (id)personWithName:(CPString)aName 
{
	 return [[self alloc] initWithName:aName];
}
 
- (id)initWithName:(CPString)aName 
{
	 self = [super init];
	 if (self) 
	{
		 name = aName;
		 jobTitle = @"";
		 company = @"";
	}
	return self;
}
 
- (void)setName:(CPString)aName 
{
	 name = aName;
}
 
- (CPString)name 
{
	return name;
}
 
- (void)setJobTitle:(CPString)aJobTitle company:(CPString)aCompany 
{
	 jobTitle = aJobTitle;
	 company = aCompany;
}
 
-(CPString) description 
{
	 return [[CPString alloc] initWithFormat:@"name: %@ jobTitle: %@ company: %@", name, jobTitle, company];
}
 
- (void)encodeWithCoder:(CPCoder)coder 
{
	[coder encodeObject:name forKey:@"name"]; 
	[coder encodeObject:jobTitle forKey:@"jobTitle"]; 
	[coder encodeObject:company forKey:@"company"]; 
} 
 
-(id)initWithCoder:(CPCoder)coder 
{
	if (self = [super init]) 
	{
		name = [coder decodeObjectForKey:@"name"]; 
		jobTitle = [coder decodeObjectForKey:@"jobTitle"]; 
		company = [coder decodeObjectForKey:@"company"];
	}
 
	return self;
}
 
@end 
cappuccino/serializacja.txt · ostatnio zmienione: 2010/01/04 16:12 przez widmogrod
 
Wszystkie treści w tym wiki, którym nie przyporządkowano licencji, podlegają licencji: CC Attribution-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki