[Q] About compressing

Lic. Edgar J. De Cleene edgardec2001 at yahoo.com.ar
Thu May 26 09:23:20 UTC 2005

Lex Spoon puso en su mail :

> Hmm, here's some code that seems to work.
> outputStream _ RWBinaryOrTextStream on: ''.
> zipper _ GZipWriteStream on: outputStream.
> zipper nextPutAll: 'hello, world!'.
> zipper close.
> zipped _ outputStream contents.
> This achieves a marvelous "compression" ratio of 33/13 = 254%.  :)
> To decode it:
> inputStream _ RWBinaryOrTextStream with: zipped.
> inputStream reset.
> unzipper _ GZipReadStream on: inputStream.
> unzipper upToEnd asString
> Note that there is a trick here in that you have to reset the
> RWBinaryOrTextStream after creating it -- the stream's position starts
> out at the end of the data instead of the beginning.  That trips me up
> all the time.
> I hope this helps,
> Lex

Sure helps, very compleete and  nice,

Yours is what I looking for (and fail). here what I find

I copy from somewhere and adapt to ChangeSet.

'From Squeak3.8 of ''5 May 2005'' [latest update: #6662] on 24 May 2005 at
10:50:47 am'!

!ChangeSet methodsFor: 'method changes' stamp: 'edc 5/24/2005 10:13'!

    | compressBuffer compressStream data compressedStream compressTarget
fileStream |

    "Prepare the gzipped data"
    data _ WriteStream on: String new.
    data header; timeStamp.
    self fileOutPreambleOn: data.
    self fileOutOn: data.
    self fileOutPostscriptOn: data.
    data trailer.
    data _ ReadStream on: data contents.
    compressBuffer _ ByteArray new: 1000.
    compressStream _ GZipWriteStream on: (compressTarget _ WriteStream on:
(ByteArray new: 1000)).
    [data atEnd]
        whileFalse: [compressStream nextPutAll: (data nextInto:
    compressStream close.
    compressedStream _ ReadStream on: compressTarget contents asString.

    fileStream _ FileStream newFileNamed: name, '.cs.gz'.
    fileStream fileOutClass: nil andObject: compressedStream.
fileStream close! !

And for compressed morphs

'From Squeak3.8 of ''5 May 2005'' [latest update: #6662] on 16 May 2005 at
11:42:41 am'!

!GZipReadStream class methodsFor: 'fileIn/Out' stamp: 'edc 5/16/2005 11:41'!
fileInCompresedMorph: fullFileName
    "FileIn the contents of a gzipped morph "
    | zipped unzipped loadedObject |
    zipped := self on: (FileStream readOnlyFileNamed: fullFileName).
    unzipped := MultiByteBinaryOrTextStream with: (zipped contents
    unzipped reset.
    loadedObject := unzipped fileInObjectAndCode.
loadedObject openInHand
! !

So , next question.
As ratio of microprocessor speed vs external extorage is bigger now what in
'96 when Squeak starts, why not have a fileOutCompressed method at Object
level what all system could use and avoid many duplicate code ?

Again , very, very thanks


A tu celular ¿no le falta algo? 
Usá Yahoo! Messenger y Correo Yahoo! en tu teléfono celular. 
Más información en http://movil.yahoo.com.ar

More information about the Squeak-dev mailing list