- 1
- 2
- 3
- 4
- 5
GZIPOutputStream out = new GZIPOutputStream(out) {
{
def.setLevel(Deflater.BEST_COMPRESSION);
}
};
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+73
GZIPOutputStream out = new GZIPOutputStream(out) {
{
def.setLevel(Deflater.BEST_COMPRESSION);
}
};
Вот так можно выставить максимальную степень сжатия GZIP-потока в жабе.
roman-kashitsyn 13.12.2013 13:54 # +1
Dummy00001 13.12.2013 14:14 # 0
если тебя не смущает такое время работы, то лучше поковырять bzip2 или lzma.
roman-kashitsyn 13.12.2013 14:18 # +1
Dummy00001 13.12.2013 14:42 # 0
...what?
мне казалось что в дебиане уже все тулзы для этого есть - просто нужно специально подготовленый каталог какой-то тулзе скормить, и она из него сделает деб?
> Ворнинги я не люблю, а время сжатия килобайтной странички значения не имеет.
в дебах все жмется с самой высокой компрессией. потому что жмется только раз, а распаковывается много раз.
не вижу никаких вариантов - http://www.debian.org/doc/debian-policy/ch-docs.html - и ZGIPOutputStream стандартный класс, что гарантирует что ничего лучше ты не найдешь (апачев точно так же туп).
другими словами: пытаться запустить внешний gzip/gzip.exe на маны, если оный отсутствует, то жать штатным стримом и терпеть варнинги линтиана.
roman-kashitsyn 13.12.2013 14:50 # 0
я maven пытаюсь прикрутить, в деб-пакеты хочу включать зависимые библиотеки. А о зависимостях лучше всех maven-у и известно, почему бы им и не собирать? К тому же, работает на порядок быстрее, чем сонм перловых тулов, проверено.
Dummy00001 13.12.2013 15:10 # 0
не DD, но вот что нагуглил случайно:
http://lintian.debian.org/manual/section-2.4.html
не решение, но может воркараунд.
Dummy00001 13.12.2013 18:40 # 0
http://www.debian.org/doc/debian-policy/ch-docs.html
стоит "should" а не "must". линтиан будет жаловатся работа у него такая. но вроде бы не -9 компрессия не противоречит полиси.
roman-kashitsyn 13.12.2013 18:44 # 0
LispGovno 13.12.2013 17:56 # 0
3.14159265 13.12.2013 14:50 # +1
Для HTTP они не годятся, как и для огромного количества других вещей где юзается zlib.
guest 13.12.2013 19:51 # −1
3.14159265 13.12.2013 21:03 # +3
Прям так и не нужно. Это только по мнению дебилов ничего более современного не нужно.
А гугл вон изобретает новые алгоритмы для http сжатия.
И с других мест тоже звучат предложения: жать не только тело, но и заголовки.
guest 14.12.2013 00:05 # −3
eth0 14.12.2013 10:32 # 0
anonimb84a2f6fd141 15.12.2013 01:58 # 0
3.14159265 17.12.2013 18:55 # −1
SDCH использует дельта-кодирование (идее которого не менее 20 лет) VCDIFF.
anonimb84a2f6fd141 18.12.2013 10:59 # +1
Stertor 18.12.2013 11:50 # −3
3.14159265 18.12.2013 13:43 # +1
Повторяю еще раз - проблема в стандартизации, внедрении и патентах.
anonimb84a2f6fd141 18.12.2013 13:53 # −1
roman-kashitsyn 18.12.2013 13:59 # 0
LispGovno 18.12.2013 21:05 # 0
roman-kashitsyn 18.12.2013 22:04 # +2
Оказывается, сжимать данные в снэпи при записи на диск, и читать их, распаковывая на лету, в среднем раза в полтора быстрее, чем читать/писать непожатые данные.
defecate-plusplus 18.12.2013 22:22 # 0
интересно, кстати
а можно прикрутить вообще на уровне файловой системы? заявлено 500МБ/с декомпресс, а это в принципе, на уровне современного ссд без рейда
bormand 18.12.2013 22:41 # +1
Ну если запретить открытие файла на read+write и смириться с тормозами seek - скорее всего можно. Чтение целиком и запись целиком будут шустрыми.
bormand 18.12.2013 22:35 # +2
И все тестят скорость на throughput, а не на latency. Сраные SSD и райд контроллеры с батарейками развратили людей ;(
Тем временем в линухах до сих пор живет знаменитый баг 12309 - когда все процессы, требующие i/o (в особенности записи) встают колом секунд на 5-10, во время копирования больших файлов...
LispGovno 18.12.2013 22:41 # 0
Это только на флешках вроде? А вообще даже на винде эта проблема есть. Особенно хорошо видна когда торрентов упорото много назапустил. Поднимай приоритет процессу не поднимай, а толку ноль. На ио приоритет не как не влияет и высокоприоритетные задачи будут стоять на ио подгрузки страниц памяти или других данных- просто колом.
bormand 18.12.2013 22:58 # +1
Да хер там. Когда копируешь что-нибудь в районе 20 гиг на HDD или создаешь файлик подобного размера, возникает такое ощущение, что это не 4 ядерная зверюга с 16 гигами памяти, а сраное говнище из 90х годов ;( Типичный лаг в пределах 0.25-0.75с со всплесками до 5-10.
Вот с торрентами, кстати, проблем не замечал. У меня траблы начинаются вроде как именно при непрерывных потоках в районе 100+ мегабайт в секунду.
Планировщики пробовал потюнить, ну снижается лаг, но все равно терпеть невозможно. В винде такого не замечал :(
anonimb84a2f6fd141 20.12.2013 13:59 # 0
LispGovno 18.12.2013 22:43 # 0
defecate-plusplus 18.12.2013 22:47 # +3
LispGovno 18.12.2013 22:58 # +2
anonimb84a2f6fd141 20.12.2013 14:01 # 0
anonimb84a2f6fd141 20.12.2013 13:58 # −1
LispGovno 18.12.2013 22:45 # +2
А Тарас то со своим силироном 600 мгц не знал!
А ещё говорили, что не гугл сейчас является движущей силой прогресса и придумывает алгоритмы.
inkanus-gray 18.12.2013 23:04 # +1
Хотя всё зависит от алгоритма сжатия.
3.14159265 19.12.2013 13:01 # +1
anonimb84a2f6fd141 20.12.2013 14:02 # 0
guest 13.12.2013 19:50 # −2
bormand 13.12.2013 20:36 # +2
Что-то я не понимаю, в чем жабофейспалм... compression method харкодится потому, что в rfc на gzip описан только deflate: (http://www.gzip.org/zlib/rfc-gzip.html), другие методы GZIPOutputStream не поддерживает, да и их, вроде бы, никто еще и не придумал... Поэтому с хардкодом deflate'а, имхо, все нормально.
И в заголовках gzip'а и deflate'а никуда не пишется степень сжатия. Видимо lintian тупо пытается распаковать и переупаковать файл на -9, и если у него получилось меньше, то матерится?
bormand 13.12.2013 21:12 # 0
bormand 13.12.2013 21:21 # +2
XFL (eXtra FLags)
These flags are available for use by specific compression methods. The "deflate" method (CM = 8) sets these flags as follows:
XFL = 2 - compressor used maximum compression, slowest algorithm
XFL = 4 - compressor used fastest algorithm
Собственно их GZIPOutputStream и хардкодит в нолик. Как вариант - можно скопировать исходник GZIPOutputStream'а себе в проект и добавить кошерную поддержку уровней. Жаль что в апстрим эту пару строчек всяко не пропихнуть ;(
bormand 13.12.2013 21:32 # +2
guest 14.12.2013 00:03 # −1
bormand 14.12.2013 00:08 # 0
roman-kashitsyn 13.12.2013 23:24 # +2
bormand 13.12.2013 23:43 # 0
P.S. Если бы writeHeader не был приватным - пофиксить было бы легко ;(
guest 14.12.2013 00:04 # 0
На похожую парашу наткнулся, когда мутил какой-то binaryoutputstream, там нельзя было что-то перезаписать.
bormand 13.12.2013 23:59 # 0
roman-kashitsyn 14.12.2013 12:48 # 0
У меня страничка пишется в in-memory, я решил постфактум флажок в массиве байт подхачить.
roman-kashitsyn 14.12.2013 13:17 # 0
bormand 14.12.2013 13:27 # 0
Хм, а почему? Ну не только ради этого хака же?
roman-kashitsyn 14.12.2013 13:38 # 0
bormand 14.12.2013 13:40 # 0
roman-kashitsyn 14.12.2013 13:49 # +1
bormand 14.12.2013 13:56 # 0
Можно упаковать два раза - первый раз в стрим, который только считает байты, второй раз - куда надо.
roman-kashitsyn 14.12.2013 15:11 # +7
LispGovno 14.12.2013 22:55 # +1
roman-kashitsyn 14.12.2013 23:37 # +6
inkanus-gray 15.12.2013 09:11 # 0
bormand 15.12.2013 09:17 # +1
Короче говоря, не во всех реализациях можно возвращать в поток более 1 символа.
LispGovno 13.12.2013 18:01 # +1
roman-kashitsyn 13.12.2013 18:08 # +3
LispGovno 13.12.2013 18:40 # 0
3.14159265 16.12.2013 15:57 # 0
Не пойму что не нравится Роману.
roman-kashitsyn 16.12.2013 16:17 # 0
3.14159265 17.12.2013 18:26 # 0
>хардкодит compression method в заголовке
Есть DeflaterOutputStream, который ничего не пишет в заголовок и имеет подходящий конструктор:
public DeflaterOutputStream(OutputStream out, Deflater def)
roman-kashitsyn 17.12.2013 18:35 # 0
3.14159265 17.12.2013 18:41 # 0
LispGovno 13.12.2013 18:40 # 0
defecate-plusplus 13.12.2013 22:33 # +1
roman-kashitsyn 16.12.2013 22:41 # +3
LispGovno 16.12.2013 23:17 # +2