java序列化 jar_使用序列化将对象传递给另一个JVM – 相同的Java版本和jar(都运行我们的应用程序)...
更新:
現(xiàn)在使用地圖.想要向其他實例發(fā)送內容的類發(fā)送對象即路由字符串.
使用對象流,使用Java serializable將對象寫入servlet.
先寫字符串然后再寫對象.
接收servlet將輸入流包裝在ObjectInputStream周圍.首先讀取字符串,然后讀取Object.路由字符串決定它去了.
更通用的方法可能是發(fā)送類名及其聲明的方法或Spring bean名稱,但這對我們來說已經足夠了.
原始問題
了解基本方法,但需要步驟的詳細信息.還知道我可以使用Jaxb或RMI或EJB …但是想使用純序列化到bytearray然后進行編碼,將它從jvm 1中的servlet 1發(fā)送到jvm 2中的servlet 2(同一個中的兩個app server實例)局域網,在兩個J2EE應用程序中設置相同的Java版本和jar)
基本步驟是(Approcah 1): –
>將任何Serializable對象序列化為字節(jié)數(shù)組并生成字符串.確切的代碼見下文
> Base64輸出1.是否需要基于64或可以跳過第2步?
>使用java.util.URLEncode.encode對字符串進行編碼
>命名參數(shù)后,使用apache http組件或URL類從servlet 1發(fā)送到2
>在Servlet 2上J2EE框架已經URLDecoced它,現(xiàn)在只需執(zhí)行反向步驟并根據(jù)param名稱轉換為對象.
既然兩者都是我們的應用程序,我們就會知道類型/類映射的param名稱.基本上尋找最快的&在JVM之間發(fā)送對象的最方便的方法.
示例:
POJO類發(fā)送
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;
}
}
****樣本發(fā)送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);
總結
以上是生活随笔為你收集整理的java序列化 jar_使用序列化将对象传递给另一个JVM – 相同的Java版本和jar(都运行我们的应用程序)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java中的alert是什么意思_jav
- 下一篇: java模拟国际象棋游戏_java国际象