我目前正在开发一个客户端/服务器应用程序。应用服务器是 Glassfish v3,通过远程 EJB 进行通信。主要问题是序列化对象图时使用大量网络带宽。例如在下一个方法中:
@Stateless
public class MyEJB extends MyRemoteInterface {
@Override
public PurchaseOrder savePurchaseOrder( PurchaseOrder po ) { ... }
}
这个方法,当远程调用时,将收到一个 PurchesOrder 实例,它是一个对象图,当通过网络传输时,它会占用大量 KB,返回时也是如此。
我已经管理了这个,现在,改变方法的原型是这样的:
...
@Override
public byte[] savePurchaseOrder( byte[] po ) { ... }
...
我在通过网络传输 PurchaseOrder 实例之前和之后手动解压缩和反序列化它。但是我松散了类型安全的方法,它变得丑陋了。
有没有办法使用java自定义序列化来压缩默认序列化过程中的输出流?例如:
@Entity
public class PurchaseOrder implements Serializable {
private void writeObject(ObjectOutputStream oos) throws IOException {
// default serialization
oos.defaultWriteObject();
// COMPRESS STREAM HERE (zip or gzip)
}
private void readObject(ObjectInputStream ois)
throws ClassNotFoundException, IOException {
// DECOMPRES STREAM HERE
// default deserialization
ois.defaultReadObject();
}
}
我需要“DE/COMPRESS STREAM HERE”部分的代码,或者另一个好主意。
预先感谢您的建议。
泽维尔。