powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Сжать строку
14 сообщений из 14, страница 1 из 1
Сжать строку
    #33067878
L_Leonid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Необходимо с помощью с GZIPOutputStream сжать строку. Как это сделать с
потоком понятно, а как преобразовать строку в поток непонятно.
String s;
PrintWriter out = new PrintWriter(new GZIPOutputStream("здесь поток из
строки s"), false);

дальше необходимо преобразовать out в строку
...
Рейтинг: 0 / 0
Сжать строку
    #33067891
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StringReader/StringWriter
...
Рейтинг: 0 / 0
Сжать строку
    #33067908
L_Leonid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
funikovyuriStringReader/StringWriter

Не могли бы привести полный пример. Доку я уже прочитал, но не понял как сделать преобразование.
...
Рейтинг: 0 / 0
Сжать строку
    #33067990
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
        GZIPInputStream is =  new  GZIPInputStream( new  ByteArrayInputStream("здесь поток из строки s".getBytes("wanted charset")));
        PrintWriter os =  new  PrintWriter(System.out);
        CopyUtils.copy(is,os); // @link http://jakarta.apache.org/commons/io/


Вместо copy() можно и свой код написать, который будет брать данные из is и отправлять в os
...
Рейтинг: 0 / 0
Сжать строку
    #33068156
L_Leonid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, а наоборот через ByteArrayOutputStream у меня не получается.

ByteArrayOutputStream bas=new ByteArrayOutputStream();
bas.write(s.getBytes("Cp1251"));
GZIPOutputStream is = new GZIPOutputStream(bas,false);
...
Рейтинг: 0 / 0
Сжать строку
    #33068191
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
        String strToCompress = "some text";

        System.out.println("=========zipped text===============");
        ByteArrayOutputStream zippedDataOS =  new  ByteArrayOutputStream();
        GZIPOutputStream os =  new  GZIPOutputStream(zippedDataOS);
        os.write(strToCompress.getBytes("windows-1251"));
        os.close();

        PrintWriter pw =  new  PrintWriter(System.out);
        CopyUtils.copy( new  ByteArrayInputStream(zippedDataOS.toByteArray()), pw);
        pw.flush();
        
        System.out.println("\n=========unZipped text===============");
        GZIPInputStream is =  new  GZIPInputStream( new  ByteArrayInputStream(zippedDataOS.toByteArray()));
        CopyUtils.copy(is,pw); // @link http://jakarta.apache.org/commons/io/
        pw.flush();
...
Рейтинг: 0 / 0
Сжать строку
    #33070677
L_Leonid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, в одну строну получилось, а рахархивирование ингда не проиходит - вываливается ошибка exception java.io.IOException: Corrupt GZIP trailer . Это происходит не на всех примерах. Прилагаю файл с тестовыми данными и исходником.
...
Рейтинг: 0 / 0
Сжать строку
    #33071500
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4262583

так что этот exception просто в ignore :)
...
Рейтинг: 0 / 0
Сжать строку
    #33073368
L_Leonid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
funikovyuri http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4262583

так что этот exception просто в ignore :)

Да вроде не мой случай, там говориться про файлы длиной больше 2Г , а у меня чуть больше 300к и вылетает ошибка. Пробовал игнорировать excp - получается строка больше примерно на 200 байт Весь вечер ковырялся ничего не помогло. Странно. Существуют ли потоковые архиваторы других разработчиков?
...
Рейтинг: 0 / 0
Сжать строку
    #33073851
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_Leonid funikovyuri http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4262583

так что этот exception просто в ignore :)

Да вроде не мой случай, там говориться про файлы длиной больше 2Г , а у меня чуть больше 300к и вылетает ошибка. Пробовал игнорировать excp - получается строка больше примерно на 200 байт Весь вечер ковырялся ничего не помогло. Странно. Существуют ли потоковые архиваторы других разработчиков?

Из твоего аттачмента:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
s= new  String(zippedDataOS.toByteArray());
   System.out.println("zip s= length =" +s.length()+" "+s );



   System.out.println("\n=========unZipped text===============");
   GZIPInputStream is =  new  GZIPInputStream( new  ByteArrayInputStream(s.getBytes()));

s.getBytes() not equal zippedDataOS.toByteArray(), т.к. происходит charencoding служебной информации + используется с самой кодировкой могут быть проблемы.

Если это исправить IOException пропадёт.
Правда со словом екатеринбург какие-то проблемы :)
...
Рейтинг: 0 / 0
Сжать строку
    #33073865
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUss.getBytes() not equal zippedDataOS.toByteArray(), т.к. происходит charencoding служебной информации + с кодировкой могут быть проблемы.
...
Рейтинг: 0 / 0
Сжать строку
    #33074230
L_Leonid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Из твоего аттачмента:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
s= new  String(zippedDataOS.toByteArray());
   System.out.println("zip s= length =" +s.length()+" "+s );



   System.out.println("\n=========unZipped text===============");
   GZIPInputStream is =  new  GZIPInputStream( new  ByteArrayInputStream(s.getBytes()));

s.getBytes() not equal zippedDataOS.toByteArray(), т.к. происходит charencoding служебной информации + используется с самой кодировкой могут быть проблемы.

Если это исправить IOException пропадёт.
Правда со словом екатеринбург какие-то проблемы :)

что-то мне не сообразить, пишу
s=new String(zippedDataOS.toByteArray(),"Cp1251");
...
GZIPInputStream is = new GZIPInputStream(new ByteArrayInputStream(s.getBytes("Cp1251")));

сначала длина 370036, потом уже 372239
...
Рейтинг: 0 / 0
Сжать строку
    #33074238
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_Leonids=new String(zippedDataOS.toByteArray(),"Cp1251");
...
GZIPInputStream is = new GZIPInputStream(new ByteArrayInputStream(s.getBytes("Cp1251")));

сначала длина 370036, потом уже 372239

Для начала сравни по байтово zippedDataOS.toByteArray() и s.getBytes("Cp1251").

А потом возьми то что было "370036" и сравни с тем что получается "372239", тоже по байтово. По крайнем мере, станет ясно где копать.
...
Рейтинг: 0 / 0
Сжать строку
    #33074532
L_Leonid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NotGonnaGetUs
Для начала сравни по байтово zippedDataOS.toByteArray() и s.getBytes("Cp1251").



byte[] byte1=zippedDataOS.toByteArray();
byte[] byte2=s.getBytes("Cp1251");
for (int j=0; j<byte1.length; j++) {
if (byte1[j]!=byte2[j]) System.out.println("not equals "+j+" "+byte1[j]+" "+byte2[j]);
}

есть расхождения, длина массивов одинаковая, пробовал играться с кодировками - не помогло.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Сжать строку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]