Я пытаюсь распаковать струну, но всегда получаю исключение магического числа, пока декомпрессируется. Сначала я сжимаю строку, а затем она становится BASE64ENCODE, а затем декодируется и декомпрессирует. Код находится в порядке вызовов.//Compressing a String
public String compress(String s) {
if(s == null || s.length() == 0) { return string; }
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(out);
gzip.write(s.getBytes("UTF-8"));
gzip.close();
return out.toString("UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
}
//Encode to Base64
public String encodeBase64(String s) {
return Base64.encodeToString(s.getBytes("UTF-8"), Base64.NO_WRAP);
}
//Decode Base64
public String decodeBase64(String s) {
return new String(Base64.decode(s, Base64.NO_WRAP), "UTF-8");
}
public String decompress(String s) {
if(s == null || s.length() == 0) {
return s;
}
byte[] ba = s.getBytes("UTF-8");
byte[] buffer = new byte[1024];
try {
ByteArrayOutputStream out = new ByteArrayOutputStream(ba.length);
ByteArrayInputStream in = new ByteArrayInputStream(ba);
GZIPInputStream gzip = new GZIPInputStream(in); // Magic Number Exception occurs here
int len;
while((len = gzip.read(buffer)) > 0) {
out.write(buffer,0 ,len);
}
gzip.close();
out.close();
return out.toString("UTF-8");
} catch (Exception e) {
e.printStackTrace;
}
}
< /code>
Обновление: < /strong> < /p>
Я сделал тестовый класс с методами и Callmethod, которые должны использоваться в проектах Android: < /p>
import android.util.Base64;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.UnsupportedEncodingException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
public class CompressTest {
public static final String message = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. \n" +
"\n" +
"Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. \n" +
"\n" +
"Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. \n" +
"\n" +
"Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. \n" +
"\n" +
"Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis. \n" +
"\n" +
"At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, At accusam aliquyam diam diam dolore dolores duo eirmod eos erat, et nonumy sed tempor et et invidunt justo labore Stet clita ea et gubergren, kasd magna no rebum. sanctus sea sed takimata ut vero voluptua. est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat. \n" +
"\n" +
"Consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus. \n" +
"\n" +
"Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. \n" +
"\n" +
"Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. \n" +
"\n" +
"Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. \n" +
"\n" +
"Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo";
//Compressing a String
public static String compress(String s) {
if(s == null || s.length() == 0) { return s; }
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(out);
gzip.write(s.getBytes("UTF-8"));
gzip.close();
return out.toString("UTF-8");
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
//Encode to Base64
public static String encodeBase64(String s) throws UnsupportedEncodingException {
return Base64.encodeToString(s.getBytes("UTF-8"), Base64.NO_WRAP);
}
//Decode Base64
public static String decodeBase64(String s) throws UnsupportedEncodingException {
return new String(Base64.decode(s, Base64.NO_WRAP), "UTF-8");
}
public static String decompress(String s) throws UnsupportedEncodingException {
if(s == null || s.length() == 0) {
return s;
}
byte[] ba = s.getBytes("UTF-8");
byte[] buffer = new byte[1024];
try {
ByteArrayOutputStream out = new ByteArrayOutputStream(ba.length);
ByteArrayInputStream in = new ByteArrayInputStream(ba);
GZIPInputStream gzip = new GZIPInputStream(in); // Magic Number Exception occures here
int len;
while((len = gzip.read(buffer)) > 0) {
out.write(buffer,0 ,len);
}
gzip.close();
out.close();
return out.toString("UTF-8");
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
< /code>
А вот и вызов: < /p>
try {
String s = CompressTest.message;
System.out.println("-----------------Message is:-----------------");
s = CompressTest.compress(s);
System.out.println("-----------------Compression is:-----------------");
System.out.println(s);
s = CompressTest.encodeBase64(s);
System.out.println("-----------------Base64 Encode is:-----------------");
System.out.println(s);
s = CompressTest.decodeBase64(s);
System.out.println("-----------------Base64 Decode is:-----------------");
System.out.println(s);
s = CompressTest.decompress(s);
System.out.println("-----------------decompressed is:-----------------");
System.out.println(s);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
< /code>
Кроме того /> �����������������mn�0�� 9���vts��������mn�0�� 9���vts���������mn�0� 100����vts���������mn�0� 100 a [���� ��-y $ �o�h�ti�c �t�r�i'n�74� ܤ k7��c����n�i��� (�l�dk*�����> j���: e ޡ i�%> d & ��h�x@ ��%� ؍� T�� (����y���n_��b���� \ ���, m�3d���t_��p%o���:? Hb g [t9se1�� 6�����-��)#ޒ o�tt���b�y����� ���)#ޒ o�tt���b�y������- ������> g [t9se1�� 6�������)#ޒ ޒ o�tt���b�y���������)#ޒ o�tt���b�y���������) � [���� ���mlvrm�oub�9 ݞ�� a 8� /�
c
��i = v_q��� 4���2������� Q������ < /p>
Здесь он не очень виден, но я сравнил сжатие перед кодом после декода, и он смотрит на это: < /p>
Одним из символов в начале отсутствует все остальное в порядке. Так что это, вероятно, часть заголовка данных, которая содержит информацию о формате GZIP. Я постараюсь добавить это вручную позже и опубликовать результат < /p>
solution < /strong> < /p>
Для всех, кто заинтересован, как я изменил код здесь, версию Bytearray, как предложено Teemu Ilmonen: < /p>
//Compressing a String
public static byte[] compress(String s) {
if(s == null || s.length() == 0) { return null; }
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(out);
gzip.write(s.getBytes("UTF-8"));
gzip.close();
return out.toByteArray();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
//Encode to Base64
public static String encodeBase64(byte[] array) throws UnsupportedEncodingException {
return Base64.encodeToString(array, Base64.NO_WRAP);
}
//Decode Base64
public static byte[] decodeBase64(String s) throws UnsupportedEncodingException {
return Base64.decode(s, Base64.NO_WRAP);
}
public static String decompress(byte[] array) throws UnsupportedEncodingException {
if(array == null || array.length == 0) {
return null;
}
byte[] buffer = new byte[1024];
try {
ByteArrayOutputStream out = new ByteArrayOutputStream(array.length);
ByteArrayInputStream in = new ByteArrayInputStream(array);
GZIPInputStream gzip = new GZIPInputStream(in); // Magic Number Exception occures here
int len;
while((len = gzip.read(buffer)) > 0) {
out.write(buffer,0 ,len);
}
gzip.close();
out.close();
return out.toString("UTF-8");
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
Подробнее здесь: https://stackoverflow.com/questions/360 ... -exception
Gzip декомпрессия String Magic Number Exception Exception ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Java: файл GZIP содержит другой файл GZIP при сохранении журналов в Windows.
Anonymous » » в форуме JAVA - 0 Ответы
- 20 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Java: файл GZIP содержит другой файл GZIP при сохранении журналов в Windows.
Anonymous » » в форуме JAVA - 0 Ответы
- 28 Просмотры
-
Последнее сообщение Anonymous
-