`

spring httpInvoker中前后台数据压缩传输的一次尝试

阅读更多
目的:在后台使用GZIP的格式压缩内存中的数据,传输到前台在进行解压缩
机制:java的GZIPInputStream
过程:

1:修改接口,返回一个byte数组
    
    /**
     * 获取压缩功能节点bytes
     * **时使用
     * 
     * @return
     */
    public byte [] loadVOsBytes();


2:修改对应方法,将传输的数据进行压缩
    /**
     * 获取压缩功能节点bytes
     * **时使用
     * 
     * @return
     */
    public byte[] loadVOsBytes() {

        // 未压缩功能节点对象数组内容
        FunVO[] vos = loadVOs();
        // 压缩
        byte[] zipBytes = null;
        ByteArrayOutputStream byteOut;
        GZIPOutputStream gzout;
        ObjectOutputStream objectOut;
        try {
            // 建立字节数组输出流
            byteOut = new ByteArrayOutputStream();
            // 建立gzip压缩输出流
            gzout = new GZIPOutputStream(byteOut);
            // 建立对象序列化输出流
            objectOut = new ObjectOutputStream(gzout);
            objectOut.writeObject(vos);
            objectOut.flush();
            // 返回压缩后字节流
            zipBytes = byteOut.toByteArray();
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        } finally {
            if (byteOut != null) {
                byteOut.close();
            }
            if (gzout != null) {
                gzout.close();
            }
            if (objectOut != null) {
                objectOut.close();
            }
        }
        return zipBytes;
    }

3:修改前台对应的获取方法,进行解压还原

    
    /**
     * 获取功能节点(前台)
     * @return
     */
    public FunVO[] getVOs() {

        if (vos == null) {
            byte[] zipBytes = login.loadVOsBytes();
            ByteArrayInputStream byteIn;
            GZIPInputStream gzIn;
            ObjectInputStream objectIn;
            try {
                // 建立字节数组输入流
                byteIn = new ByteArrayInputStream(zipBytes);
                // 建立gzip解压输入流
                gzIn = new GZIPInputStream(byteIn);
                // 建立对象序列化输入流
                objectIn = new ObjectInputStream(gzIn);
                // 还原成未压缩的功能节点对象数组
                vos = (FunVO[]) objectIn.readObject();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            } catch (IOException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            } finally {
                if (byteIn != null) {
                    byteIn.close();
                }
                if (gzIn != null) {
                    gzIn.close();
                }
                if (objectIn != null) {
                    objectIn.close();
                }
            }
        }
        return vos;
    }

OK,到这里时,传输的数据已经进行压缩了!
扩展:压缩失败时,在catch里面捕获到异常,再传回一个不进行压缩的byte数组,需要在接口中添加一个标志,告诉客户端是否是进行过压缩。
扩展二:对应的压缩与解压方法可以放入工具类。
分享到:
评论
1 楼 longzy87 2012-06-02  
学习 了。

相关推荐

    Spring HttpInvoker介绍

    公司内部讲义,比较了SOA,RMI和Spring HttpInvoker。并介绍了Spring HttpInvoker的基本使用方法。

    Spring HttpInvoker的封装

    HttpInvoker是Spring框架的一部分,它提供了一种基于HTTP协议的远程调用机制,使得不同网络环境中的Java应用之间能够进行安全、高效的通信。本篇文章将深入探讨Spring HttpInvoker的原理以及如何对其进行封装,以便...

    Spring HttpInvoker

    Spring HttpInvoker,是一套基于Maven+Spring+SpringMVC+MyBatis框架,还包含了Invoker的客户端及服务器端的demo实例

    使用httpInvoker提供远程服务

    在分布式系统中,远程服务调用是常见的需求,Spring框架提供了多种远程服务支持,其中包括HttpInvoker。HttpInvoker是Spring框架的一部分,它允许开发者使用HTTP协议进行远程方法调用,而不需要额外的类库。与...

    spring httpInvoker示例

    HTTP Invoker是Spring框架提供的一种轻量级远程调用解决方案,它利用HTTP协议在客户端和服务端之间传输Java对象。这种方式相比传统的RMI或SOAP更简单、灵活,因为它不需要额外的序列化和协议层。我们将从服务端和...

    Spring HttpInvoker 初学实例

    org.springframework.remoting.httpinvoker最基本的实现例子,这是3个eclipse的JavaEE工程,全部导入即可,能运行。 初学可以轻松了解Spring HttpInvoker 的结构和使用。

    springboot-httpinvoker-demo.zip

    而在微服务架构中,服务间通信是必不可少的一部分,HTTP Invoker作为Spring框架的一个组件,为Spring Boot应用提供了一种轻量级的远程方法调用(RMI)方案。本篇将深入探讨SpringBoot HTTP Invoker的原理、配置以及...

    spring-httpinvoker-demo

    Spring HTTP Invoker是spring框架中的一个远程调用模型,执行基于HTTP的远程调用,也就是说,可以通过防火墙,并使用java的序列化机制在网络间传递对象。客户端可以很轻松的像调用本地对象一样调用远程服务器上的...

    http invoker 做post测试

    HTTP Invoker 是一个Java框架,主要用于在分布式系统中进行远程方法调用(RPC)。它通过HTTP协议提供服务,使得客户端可以像调用本地方法一样调用远程服务。在这个场景下,“http invoker 做post测试”指的是在完成...

    Spring 实现远程访问详解——httpinvoker

    上文我们利用Spring rmi实现了Spring的远程访问(Spring 实现远程访问详解——rmi),本文主要讲解利用HttpInvoke实现远程访问。 Spring httpInvoker使用标准java序列化机制,通过Http暴露业务服务。如果你的参数和...

    用Http Invoker实现RCP客户端与后台的交互

    - Http Invoker是Spring框架的一个组件,它利用HTTP协议来传输Java对象,实现了客户端与服务器端之间的透明远程方法调用。 - 它的工作原理是将客户端调用的方法及参数序列化成HTTP请求发送到服务器,服务器端反...

    Spring的HttpInvoker使用示例 (可下载源码)

    NULL 博文链接:https://lggege.iteye.com/blog/369151

    HttpInvoker.zip http调试工具

    《HttpInvoker:深入理解HTTP调试工具的奥秘》 在Web开发中,HTTP协议作为互联网应用的基础,扮演着至关重要的角色...在日常工作中,不妨尝试利用HttpInvoker来提升你的工作效率,让每一个HTTP请求都变得透明且可控。

    Java Spring1.2 Remote Invoke HTTP Invoker

    6. **性能优化**:虽然HTTP Invoker相比RMI有更高的网络开销,但可以通过一些手段优化,例如使用HTTP连接池,减少HTTP请求的建立和关闭次数,或者使用GZIP压缩来减小数据传输量。 7. **故障恢复**:HTTP Invoker...

    Java Spring2.5 Remote Invoke HTTP Invoker

    HTTP Invoker是Spring框架的一个组件,它提供了透明的远程方法调用能力,通过HTTP POST请求将Java对象序列化为字节流,然后在网络中传输,到达目标服务器后反序列化并执行相应的方法。这种方式简化了客户端和服务端...

    Http Invoker

    Http Invoker是一款用于接口测试的工具,它允许开发者对Web服务进行调用和测试,验证API的功能和性能。虽然在某些用户看来,Http Invoker可能并不是最易用或者功能最全面的工具,但其核心概念和使用方法对于理解和...

    Hessian 、 HttpInvoker 、 XFire 、 Axis

    HttpInvoker主要面向Spring应用程序,易于集成,但相比Hessian,其数据传输效率较低,因为HTTP协议本身较重,且Java序列化也相对消耗资源。 XFire(后来被Apache CXF吸收)是一款基于XML的Web服务框架,它支持多种...

    httpinvoker.zip

    - 功能测试:在APP开发过程中,可以使用HTTP Invoker测试后台接口,确保功能正常。 - 性能测试:模拟大量并发请求,评估服务器的负载能力。 - API调试:快速调试API接口,检查返回数据的正确性。 4. **在小程序...

    Eclipse工程Http Invoker Service & Client

    Http Invoker是Spring框架的一个组件,允许在分布式环境中通过HTTP协议透明地调用Java对象的方法,提供了一种轻量级的RPC(Remote Procedure Call)实现。 **Http Invoker服务端(Service)** 在Http Invoker...

    Jmail+ HttpInvoker+定时任务+Aop+Rmi+

    HttpInvoker是Spring框架的一个组件,主要用于实现基于HTTP协议的远程服务调用。它允许Java对象像本地调用一样调用远程的服务方法,降低了分布式系统间的通信复杂性。HttpInvoker通过序列化对象和方法调用参数,将其...

Global site tag (gtag.js) - Google Analytics