Header

Basic examples

We give some class-side messages to facilitate the more common uses of serialization and materialization. The next example writes and reads from file:
FLSerializer serialize: 'stringToSerialize' toFileNamed: 'demo.fuel'. 
materializedString := FLMaterializer materializeFromFileNamed: 'demo.fuel'.
We also provide messages for storing into a ByteArray. This can be fine for users of a NoSQL database:
anArray := FLSerializer serializeToByteArray: 'stringToSerialize'. 
materializedString := FLMaterializer materializeFromByteArray: anArray.

FileStream

In this example we work with files. Note that we set the file in binary mode:
FileStream forceNewFileNamed: 'demo.fuel' do: [:aStream |
	FLSerializer newDefault 
		serialize: 'stringToSerialize' 
 		on: aStream binary].

FileStream oldFileNamed: 'demo.fuel' do: [:aStream |
	materializedString := (FLMaterializer newDefault 
		materializeFrom: aStream binary) root].
Note also that we are no longer using the class-side messages of previous examples. Now, for both FLSerializer and FLMaterializer, we first create instances with #newDefault to then perform the desired operations. As we will see in next example, creating the instances brings more possibilities.

Compressing

Of course, you could use stream compressors provided by the system. However, we have detected some errors serializing WideStrings. An example of use:
FileStream forceNewFileNamed: 'number.fuel.zip' do: [:aFileStream | 
	|gzip|
	aFileStream binary.
	gzip := GZipWriteStream on: aFileStream.
	FLSerializer newDefault serialize: 123 on: gzip.
	gzip close. ].
FileStream oldFileNamed: 'number.fuel.zip' do: [:aFileStream | 
	|gzip|
	aFileStream binary.
	gzip := GZipReadStream on: aFileStream.		
	materialization := FLMaterializer newDefault 
		materializeFrom: gzip.
	gzip close. ].

Showing a progress bar

Sometimes it is nice to see progress updates on screen. Use #showProgress in this cases.
FileStream forceNewFileNamed: 'numbers.fuel' do: [:aStream |
	FLSerializer newDefault 
		showProgress;
		serialize: (1 to: 200000) asArray 
		on: aStream binary ].
	
FileStream oldFileNamed: 'numbers.fuel' do: [:aStream | 
	FLMaterializer newDefault 
		showProgress;
		materializeFrom: aStream binary ].
Package FuelProgressUpdate must be installed. You can use:
(ConfigurationOfFuel project version: '1.9') 
	load: 'FuelProgressUpdate'.