我需要一个在android中使用GZip压缩字符串的示例。我想向方法发送一个像“hello”这样的字符串并获得以下压缩字符串:
BQAAAB + LCAAAAAAABADtvQdgHEmWJSYvbcp7f0r1StfgdKEIgGATJNiQQBDswYjN5pLsHWlHIymrKoHKZVZlXWYWQMztnbz33nvvvffee ++ 997o7nU4n99 // P1xmZAFs9s5K2smeIYCqyB8 / fnwfPyLmeVlW / W + GphA2BQAAAA ==
然后我需要解压缩它。谁能给我一个例子并完成以下方法?
private String compressString(String input) {
//...
}
private String decompressString(String input) {
//...
}
谢谢,
更新
根据scessor的回答,现在我有以下4种方法。Android和.net压缩和解压缩方法。除一种情况外,这些方法彼此兼容。我的意思是它们在前3个状态中兼容但在第4个状态下不兼容:
状态1)Android.compress < - > Android.decompress :( 好的)
状态2)Net.compress < - > Net.decompress :( 好的)
状态3)Net.compress - > Android.decompress :( 好的)
状态4)Android.compress - > .Net.decompress :( 不行)
任何人都可以解决它吗?
Android方法:
public static String compress(String str) throws IOException {
byte[] blockcopy = ByteBuffer
.allocate(4)
.order(java.nio.ByteOrder.LITTLE_ENDIAN)
.putInt(str.length())
.array();
ByteArrayOutputStream os = new ByteArrayOutputStream(str.length());
GZIPOutputStream gos = new GZIPOutputStream(os);
gos.write(str.getBytes());
gos.close();
os.close();
byte[] compressed = new byte[4 + os.toByteArray().length];
System.arraycopy(blockcopy, 0, compressed, 0, 4);
System.arraycopy(os.toByteArray(), 0, compressed, 4,
os.toByteArray().length);
return Base64.encode(compressed);
}
public static String decompress(String zipText) throws IOException {
byte[] compressed = Base64.decode(zipText);
if (compressed.length > 4)
{
GZIPInputStream gzipInputStream = new GZIPInputStream(
new ByteArrayInputStream(compressed, 4,
compressed.length - 4));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
for (int value = 0; value != -1;) {
value = gzipInputStream.read();
if (value != -1) {
baos.write(value);
}
茅侃侃
小怪兽爱吃肉