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'.