如果对象位于不同的包中,则压缩和解压缩java中的对象

如果对象位于不同的包中,则压缩和解压缩java中的对象,java,serialization,deserialization,Java,Serialization,Deserialization,下面是我压缩java对象并将对象解压缩回给定类对象的方法 压缩代码段 public <T extends Serializable> byte[] compress(T obj){ ByteArrayOutputStream baos = new ByteArrayOutputStream(); try { SnappyOutputStream sos=new SnappyOutputStream(baos); ObjectOutp

下面是我压缩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 resides in  com.mypro.client.vo package
byte[] ar=compress(new SampleVO());
SampleVO s=uncompress(ar,SampleVO.class);
在我的需求中,我有客户机-服务器通信它做什么客户机压缩
SampleVO.java
(驻留在
com.mypro.client.vo包中
)类,并将对象发布到服务器。通信通过
REST
端点进行

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

为了解决这个问题,我将服务器端包重命名为匹配客户端包,然后它就工作了(
com.mypro.server.vo改为com.mypro.client.vo

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

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


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


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

在java中,类由非限定名称+包定义。所以对于java来说,它是不同的包=>不同的类,没有办法绕过它!为什么服务器端包与客户端包不同?你的设计好像有什么问题。
//SampleVO.java resides in  com.mypro.client.vo package
byte[] ar=compress(new SampleVO());
SampleVO s=uncompress(ar,SampleVO.class);