Java - 如何对java对象进行Gzip压缩

标签 java json compression gzip

如何使用 Gzip 压缩 Java pojo 对象?

下面的代码压缩字符串 -

public static String compress(String str, String inEncoding) {
        if (str == null || str.length() == 0) {
            return str;
        }
        try {
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            GZIPOutputStream gzip = new GZIPOutputStream(out);
            gzip.write(str.getBytes(inEncoding));
            gzip.close();
            return URLEncoder.encode(out.toString("ISO-8859-1"), "UTF-8");
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

如何使用下面的pojo类对象(客户端cc)而不是String str作为参数并压缩?

Pojo 类 -

Class client {
Public string name;
Public string location;
//Getter and setter methods
}

如何使用 gzip 压缩和解压缩这个客户端 pojo 类?

最佳答案

您可以通过执行以下操作来压缩使用 gzip 实现可序列化的 Client 类:

public static bytes[] compressThis(Client client){
  ByteArrayOutputStream baos = new ByteArrayOutputStream();
  GZIPOutputStream gzipOut = new GZIPOutputStream(client);
  ObjectOutputStream objectOut = new ObjectOutputStream(gzipOut);
  objectOut.writeObject(client);
  objectOut.close();
  return baos.toByteArray();
}

接下来,您可以通过执行以下操作来解压缩它:

public static getClientFrom(bytes[] bytes){
  ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
  GZIPInputStream gzipIn = new GZIPInputStream(bais);
  ObjectInputStream objectIn = new ObjectInputStream(gzipIn);
  Client client = (Client) objectIn.readObject();
  objectIn.close();
  return client;
}

关于Java - 如何对java对象进行Gzip压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60134395/

相关文章:

Java - 显示 JPopupMenu 时触发执行代码?

java - 使用 LWJGL 时是否需要使用 glDelete*

javascript - lodash - 通过提供两个要在其中查找的值来查找所有对象

ruby-on-rails - 在 Rails 中存储到数据库之前透明地压缩属性

C++ 使用 libzpaq 压缩到 char* 缓冲区

compression - gzip 压缩异常?

java - 是否可以在没有 Terracotta Enterprise Suite 的情况下使用 Ehcache 实现分布式缓存?

java - 通过删除清除所有项目后列表返回一项

javascript - 如何从 API 获取未见过/未读的通知计数?

ios - 使用 Alamofire 在 Swift 4 中解析 Youtube api