如果对象位于不同的包中,则压缩和解压缩java中的对象
下面是我压缩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
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
)。当处理它时,通过wsclassNotfoundException 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);