java序列化 jar_使用序列化将对象传递给另一个JVM – 相同的Java版本和jar(都运行我们的应用程序)...

更新:

现在使用地图.想要向其他实例发送内容的类发送对象即路由字符串.

使用对象流,使用Java serializable将对象写入servlet.

先写字符串然后再写对象.

接收servlet将输入流包装在ObjectInputStream周围.首先读取字符串,然后读取Object.路由字符串决定它去了.

更通用的方法可能是发送类名及其声明的方法或Spring bean名称,但这对我们来说已经足够了.

原始问题

了解基本方法,但需要步骤的详细信息.还知道我可以使用Jaxb或RMI或EJB …但是想使用纯序列化到bytearray然后进行编码,将它从jvm 1中的servlet 1发送到jvm 2中的servlet 2(同一个中的两个app server实例)局域网,在两个J2EE应用程序中设置相同的Java版本和jar)

基本步骤是(Approcah 1): –

>将任何Serializable对象序列化为字节数组并生成字符串.确切的代码见下文

> Base64输出1.是否需要基于64或可以跳过第2步?

>使用java.util.URLEncode.encode对字符串进行编码

>命名参数后,使用apache http组件或URL类从servlet 1发送到2

>在Servlet 2上J2EE框架已经URLDecoced它,现在只需执行反向步骤并根据param名称转换为对象.

既然两者都是我们的应用程序,我们就会知道类型/类映射的param名称.基本上寻找最快的&在JVM之间发送对象的最方便的方法.

示例:

POJO类发送

package tst.ser;

import java.io.Serializable;

public class Bean1 implements Serializable {

/**

* make it 2 if add something without default handling

*/

private static final long serialVersionUID = 1L;

private String s;

public String getS() {

return s;

}

public void setS(String s) {

this.s = s;

}

}

* 效用 *

package tst.ser;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.net.URLEncoder;

public class SerUtl {

public static String serialize(Object o) {

String s = null;

ObjectOutputStream os = null;

try {

os = new ObjectOutputStream(new ByteArrayOutputStream());

os.writeObject(o);

s = BAse64.encode(os.toByeArray());

//s = URLEncoder.encode(s,"UTF-8");//keep this for sending part

} catch (Exception e) {

// TODO: logger

e.printStackTrace();

return null;

} finally {

// close OS but is in RAM

try {

os.close();// not required in RAM

} catch (Exception e2) {// TODO: handle exception logger

}

os = null;

}

return s;

}

public static Object deserialize(String s) {

Object o = null;

ObjectInputStream is = null;

try {

// do base 64 decode if done in serialize

is = new ObjectInputStream(new ByteArrayInputStream(

Base64.decode(s)));

o = is.readObject();

} catch (Exception e) {

// TODO: logger

e.printStackTrace();

return null;

} finally {

// close OS but is in RAM

try {

is.close();// not required in RAM

} catch (Exception e2) {// TODO: handle exception logger

}

is = null;

}

return o;

}

}

****样本发送servlet ***

Bean1 b = new Bean1(); b.setS("asdd");

String s = SerUtl.serialize(b);

//do UrlEncode.encode here if sending lib does not.

HttpParam p = new HttpParam ("bean1",s);

//http components send obj

****样本接收servlet ***

String s = request.getParameter("bean1");

Bean1 b1 = (Beean1)SerUtl.deserialize(s);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值