gpt4 book ai didi

java - 如果 Java 中的对象驻留在不同的包中,则压缩和解压缩它们

转载 作者:行者123 更新时间:2023-11-30 02:41:28 25 4
gpt4 key购买 nike

这是我压缩java对象并将对象解压缩回给定类对象的方法。

压缩代码片段

public <T extends Serializable> byte[] compress(T  obj){

ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
SnappyOutputStream sos=new SnappyOutputStream(baos);
ObjectOutputStream objectOut = new ObjectOutputStream(sos);
objectOut.writeObject(obj);
objectOut.close();

} catch (IOException e) {

throw new RuntimeException();
}
return baos.toByteArray();
}

解压代码片段

public <T extends Serializable> T uncompress(byte[] srcByteArray,
Class<T> type) {

ObjectInputStream objectIn = null;
T obj = null;
try {
ByteArrayInputStream bais = new ByteArrayInputStream(srcByteArray);
SnappyInputStream sis = new SnappyInputStream(bais);
objectIn = new ObjectInputStream(sis);
obj = type.cast(objectIn.readObject());
} catch (Exception e) {

throw new RuntimeException();
}

return obj;

}

如果压缩类和解压缩类对象位于同一个包中,则压缩和解压缩有效。

例如:SampleVO.java

package com.mypro.client.vo;
class SampleVO implements Serializable{
instance fields...
getter and setters
}

使用

//SampleVO.java resides in  com.mypro.client.vo package
byte[] ar=compress(new SampleVO());
SampleVO s=uncompress(ar,SampleVO.class);

根据我的要求,我有客户端服务器通信,它的作用是客户端压缩 SampleVO.java(位于 com.mypro.client.vo 包)类并将对象发布到server.communication 通过 REST 端点发生。

当服务器收到压缩字节流并将未压缩的 obj 返回到相同的类类型(SampleVO.java)但驻留在不同的包中时。(com.mypro.server.vo)。处理它时classNotfoundException com.mypro.client.vo.SampleVO

为了克服问题,我将服务器端包重命名为与客户端包匹配,然后它就起作用了(com.mypro.server.vo 变为 com.mypro.client.vo)。

但我觉得这不是实现这一目标的优雅方法。原因是可以让多个压缩对象与服务器端通信,然后我必须重命名所有包以匹配客户端包。

所以我的问题是,如果 java 对象驻留在不同的包和不同的项目中,我如何压缩它们并解压缩回给定的类类型。

注意:客户端和服务器是单独的maven项目。

最佳答案

你的问题是你应该有三个包,而不是两个。一个用于服务器,一个用于客户端,数据模型是一个独立的包/项目,不属于客户端或服务器。

数据模型包是服务器和客户端的依赖项。

关于java - 如果 Java 中的对象驻留在不同的包中,则压缩和解压缩它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41562931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com