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