This is great! 
And, +1 on the need for some more convenience constructors...

Word of warning (which would be nice to mention in the guide); using
writeStreamDo: and manually constructed buffered writers will not #flush the
buffered stream automatically on close, so it's crucial this is done
manually.

charGen := Random seed: 16543986234. 
output := String new: 1024*1024*50.
1 to: output size do: [ :ix | output at: ix put: ((charGen nextInt: 256) -
1) asCharacter ].

[(File named: 'utf16test.txt') writeStreamDo: [:ws | |encStream|
                encStream := ZnCharacterWriteStream 
                        on: (ZnBufferedWriteStream on: ws) 
                        encoding: 'utf16'.
                encStream nextPutAll: output
                ]] timeToRun. 

FileSize: 102 336 KB.

[(File named: 'utf16test2.txt') writeStreamDo: [:ws | |encStream|
                encStream := ZnCharacterWriteStream 
                        on: (ZnBufferedWriteStream on: ws) 
                        encoding: 'utf16'.
                encStream nextPutAll: output;flush
                ]] timeToRun. 

FileSize: 102 400 KB.

It's about 4 times slower than the corresponding 

[FileStream forceNewFileNamed: 'utf16test2.txt' do: [:ws | 
                ws converter: UTF16TextConverter new.
                ws nextPutAll: output
                ]] timeToRun

but it's 100MB of UTF16, and 4 secs vs 1, so probably not relevant to real
use cases .

Another addition to the guide valuable to those of use still stuck in the
stone age, would be code  equivalents to FileStream methods:
forceNewFileNamed:do:
newFileNamed:do:
oldFileNamed:do:

Cheers,
Henry




--
Sent from: http://forum.world.st/Pharo-Smalltalk-Users-f1310670.html

Reply via email to