2012-06-15 2 views
2

Есть ли способ zip строки (с драгоценным камнем или стандартной библиотекой), чтобы я мог получить сжатый результат строки? Пример:Zip строка в памяти Ruby

"hello world".zip #=> zipped version of string 

Кроме того, декомпрессия была бы хорошей, если бы кто-то мог включить это в свое решение.

+0

возможный дубликат [Как я могу генерировать почтовый файл без сохранения на диск с Ruby?] (Http://stackoverflow.com/questions/2405921/how-can- i-generate-zip-file-without-saving-to-the-disk-with-ruby) –

ответ

6

Вы можете использовать Zlib

>> require 'zlib' 
=> true 
>> s = "this is a long string with many many many many repetition" 
=> "this is a long string with many many many many repetition" 
>> s.size 
=> 57 
>> cs = Zlib.deflate(s) 
=> "x\x9C+\xC9\xC8,V\x00\xA2D\x85\x9C\xFC\xBCt\x85\xE2\x92\xA2L U\x9EY\x92\xA1\x90\x9B\x98W\x89N\x14\xA5\x16\xA4\x96d\x96d\xE6\xE7\x01\x00\\?\x15P" 
>> cs.size 
=> 48 
>> is = Zlib.inflate(cs) 
=> "this is a long string with many many many many repetition" 
+2

Собирался бы опубликовать это, так как он находится в stdlib, настолько доступный :) http://www.ruby-doc.org/stdlib-1.9.3/libdoc/zlib/rdoc/Zlib/Deflate.html – d11wtq

+0

Спасибо! Другое решение заставило меня записать файл. Документы ZLIB не совсем лучшие. – adrian

0

Я хотел бы передать вам этот хороший answer по vas, она детализирует rubyzip gem, который, как вы можете видеть в documentation имеет входные и OutputStream объекты и должны делать то, что вы хотите.

+0

Затем отметьте/проголосовать, чтобы закрыть как дубликат, а не размещать ссылку на другой вопрос/ответ. –

+0

Я тоже обозначал как дубликат, но я не знаю, как он будет объединен или закрыт, поэтому я не был уверен, что тогда OP увидит ссылку. Извините, я очень новичок в SO. :) –

+0

Вы всегда можете оставить комментарий в этом случае. –

Смежные вопросы