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

使用对象流,使用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);

解决方法

您无需转换为字符串.您可以将二进制数据直接发布到servlet,例如通过在 HttpUrlConnection的输出流之上创建ObjectOutputStream.将请求方法设置为POST.

处理post的servlet可以从HttpServletRequest的ServletInputStream创建的ObjectStream中反序列化.

不过,我建议JAXB随时使用二进制序列化.这些框架不仅非常适合互操作性,还可加快开发速度并创建更强大的解决方案.

我看到的优点是更好的工具,类型安全和代码生成,保持您的选项打开,以便您可以从其他版本或其他语言调用您的代码,并更容易调试.不要低估难以解决因意外地将错误类型或双重转义数据发送到servlet而导致的错误的成本.我希望性能优势太小,无法弥补这一点.

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

  1. 使用canvas压缩图片大小的方法示例

    这篇文章主要介绍了使用canvas压缩图片大小的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  2. 手对手的教你用canvas画一个简单的海报的方法示例

    企业的广告投入开始从电视等传统媒体向基于圈层文化的新媒体精准营销转移,很多人都想制作一张属于自己的海报,本文介绍了手对手的教你用canvas画一个简单的海报的方法示例,感兴趣的可以了解一下

  3. 浅谈移动端网页图片预加载方案

    这篇文章主要介绍了浅谈移动端网页图片预加载方案 的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  4. html5 canvas合成海报所遇问题及解决方案总结

    这篇文章主要介绍了html5 canvas合成海报所遇问题及解决方案总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  5. 使用html2canvas实现将html内容写入到canvas中生成图片

    这篇文章主要介绍了使用html2canvas实现将html内容写入到canvas中生成图片,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  6. Canvas与图片压缩的示例代码

    本篇文章主要介绍了Canvas与图片压缩的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  7. web字体加载方案优化小结

    这篇文章主要介绍了web字体加载方案优化小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  8. ios – 使用Base64和JSON上传大图像

    我正在使用此功能使用JSON将图像上传到服务器.为此,我首先将图像转换为NSData,然后使用Base64转换为Nsstring.当图像不是很大时,该方法可以正常工作,但是当我尝试上传2Mb图像时,它会崩溃.问题是,即使调用didReceiveResponse方法以及返回的didReceiveData,服务器也不会接收我的图像.起初我认为这是一个超时问题,但即使将其设置为1000.0它仍然不起作用.任何的想法?

  9. ios – CGPath和UIBezierPath()有什么区别?

    目前,我正在努力制作一个自定义按钮,我有一个图像,并具有坐标,但我发现您可以通过使用CGPath类或UIBezierPath创建一个按钮/对象类.有人可以告诉我两者有什么区别?解决方法CGPath是CoreGraphics库的不透明类型,而UIBezierPath是UIKit中的Obj-C类.UIBezierPath是一个围绕CGPath的包装,具有更加面向对象的界面和一些方便的方法.使用CGPath可能会略微更快,因为它不必经过Obj-C,并且它具有更高级的功能,如CGPathApply.重要的是,UI

  10. swift 快速奔跑的兔几 本节的内容是:序列化与反序列化

    在cocoa中,我们经常需要向磁盘保存数据块,cocoa将这些数据块表示为NSData对象例如,有一个字符串,将其转换为NSData,可以使用如下方法:我们还可以将对象转化为数据。遵守协议NSCoding的对象可以转换为NSData对象,也可以从NSData对象中加载,方法如下:

随机推荐

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

    但是想使用纯序列化到bytearray然后进行编码,将它从jvm1中的servlet1发送到jvm2中的servlet2局域网,在两个J2EE应用程序中设置相同的Java版本和jar)基本步骤是:–>将任何Serializable对象序列化为字节数组并生成字符串.确切的代码见下文>Base64输出1.是否需要基于64或可以跳过第2步?

  2. 所有JVM /系统中的Java,Object.hashCode()结果常量?

    Object.hashCode()的输出是否必须在同一个对象的所有JVM实现上相同?例如,如果“test”.hashCode()在1.4上返回1,它是否可能在1.6上返回2.或者如果操作系统不同,或者实例之间存在不同的处理器架构,该怎么办?

  3. Clojure的STM模型可以在多个JVM上运行吗?

    我知道Clojure在多核计算机上运行良好,但我想知道它是否适用于在多台计算机上分布的JVM集群?

  4. java – 加载时出现Eclipse jvm.dll错误

    解决方法按照评论中的要求.您的eclipse版本正在搜索jdk的x86版本.您应该检查您的eclipse是否是64位版本,如果没有,切换到64位jvm.

  5. java – 什么JVM优化导致这些性能结果?

    执行JavaREST服务性能测试我看到一个意外的模式:在每次调用中创建并返回相同值对象的方法比仅返回存储在类或对象字段中的值对象的另一个版本运行得更快.码:字节代码:>内联(更快):getstatic,invokestatic,invokevirtual,areturn>静态归档(较慢):getstatic,areturn>对象字段(较慢):aload,getfield,areturn性能(使用A

  6. java – JVM是否有计划在运行时支持泛型?

    你知道,就像CLR一样.有人甚至承认缺乏运行时通用信息是一个问题,并努力解决它?解决方法Java的设计者选择此解决方案来保持向后兼容性.从那时起,存在更多的Java代码,因此破坏向后兼容性会产生更糟糕的后果.所以我怀疑他们会改变他们的想法.

  7. 如何为多个jvm支持创建单例java类?

    任何想法,如何实现?

  8. java – 强制jvm返回本机内存

    参见英文答案>JVMsendingbackmemorytoOS3个我不时在需要大量内存的eclipse任务中运行.所以jvm在任务运行时吞下大约2-3GB的RAM,没关系.但是一旦jvm占用了那个内存它就不会释放它而且我有一种情况,当堆中使用的内存大约是200mb,总堆大小约为3gb时,这真的是不需要的,因为其他程序正在挨饿.我尝试了Max/MinHeapFreeRatio参数来强制jvm减少未使

  9. java – 获取给定JVM实例中所有当前加载的类的列表

    知道给定JVM实例当前加载哪些类是很方便的.例如,有没有办法让他们通过JVisualVM?

  10. java – JVM Spec,JVM Implementation,JVM Runtime之间的区别

    我读了以下几个字,但我想知道它们之间的差异……JVM规范,JVM实现,JVM运行时解决方法JVMSpec:描述JVM应如何表现的文档.JVM实现:基于JVMSpec的JVM实现.JVM运行时:JVM实现的一个实例.

返回
顶部