improved draft of Decompressor.Read(), but still in progress