作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我压缩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/
我是一名优秀的程序员,十分优秀!