`

Spring 处理压缩和解压缩请求

 
阅读更多
核心是压缩和解压。


压缩代码:
public byte[] compress(String str) {
        if (str == null || str.length() == 0) {
            return null;
        }
        ByteArrayOutputStream out = null;
        GZIPOutputStream gzip = null;
        byte[] compress;
        try {
            out = new ByteArrayOutputStream();
            gzip = new GZIPOutputStream(out);
            gzip.write(str.getBytes("utf-8"));
            gzip.close();
            compress = out.toByteArray();
            return compress;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (null != out) {
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }



调用代码这模拟将压缩后的byte[]数组作为请求Body给另外的微服务的url

public String getTollJsonByTile(String coordiate) throws Exception {

        /* protobuffer对字符串压缩效果一般,所以还是用GZIP进行压缩。
FmbRequstPb.FmbRequstPbInner.Builder request = FmbRequstPb.FmbRequstPbInner.newBuilder();
        request.setCoordinate(coordiate);
        request.setCarid(123);
        byte[] sentByteArray = request.build().toByteArray();
*/

        HttpHeaders requestHeaders = new HttpHeaders();
        // Accept
        //requestHeaders.set("Accept", "text/");
        requestHeaders.set("Accept-Charset", "utf-8");

        //对字符串进行压缩
        byte[] test = compress(coordiate);


        // String sst1= restTemplate.postForObject("http://SYNC/sync/user/find/modeid?parm={parm}",null,String.class,"abcde");
        String sst2 = restTemplate.postForObject("http://SYNC/sync/adas/pbf/warn", test, String.class);

        return sst2;
    }


SYNC这个微服务的接收controller

 @RequestMapping(value = "/adas/pbf/warn",method = RequestMethod.POST)
    public ResponseEntity getBrotocalBuffer(HttpServletRequest rq,@RequestBody byte[] coordinates) throws IOException {

        //FmbRequstPb.FmbRequstPbInner req = FmbRequstPb.FmbRequstPbInner.parseFrom(coordinates);

        //return ResponseEntity.ok(req.toByteArray());
        //解压缩
        String ss = uncompress(coordinates);


        return ResponseEntity.ok(ss);

    }



解压缩代码:
public String uncompress(byte[] str) {
        if (str == null || str.length== 0) {
            return null;
        }
        ByteArrayOutputStream out = null;
        ByteArrayInputStream in = null;
        GZIPInputStream gzip = null;
        String uncompress = "";
        try {
            out = new ByteArrayOutputStream();
            in = new ByteArrayInputStream(str);
            gzip = new GZIPInputStream(in);
            byte[] buffer = new byte[1024];
            int offset = -1;
            while ((offset = gzip.read(buffer)) != -1) {
                out.write(buffer, 0, offset);
            }
            uncompress = out.toString("utf-8");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (null != gzip) {
                try {
                    gzip.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != in) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != out) {
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return uncompress;
    }


分享到:
评论

相关推荐

    Spring3.2Jar官方jar包

    8. **snappy-java-1.0.4.1.jar**:Snappy是一个高效的压缩和解压缩库,用于提高数据存储和传输的效率,特别是在大数据和Hadoop环境中。 9. **jackson-mapper-asl-1.9.2.jar**:Jackson是一个流行的JSON库,用于Java...

    Spring_Note.zip

    在Spring中,可以通过使用Java的`java.util.zip`包或第三方库如Apache Commons Compress来实现文件的压缩和解压缩。例如,你可以创建一个服务类,使用`ZipOutputStream`将多个文件写入到一个zip文件中,或者使用`...

    zip的文件流传输压缩

    1. Java I/O流:包括InputStream和OutputStream的使用,以及它们在文件压缩和解压缩过程中的角色。 2. ZipOutputStream的使用:如何创建和填充zip文件,将文件流添加到压缩包中。 3. 文件传输协议:可能包括FTP和...

    mina_spring模仿springmvc控制器

    Mina提供了压缩和解压缩功能,以及高效的序列化和反序列化机制,有助于减少数据传输量和提高处理速度。同时,可以通过优化数据结构和算法,以及调整Mina的缓冲区大小,进一步提升性能。 最后,实现测试是非常重要的...

    spring4.2+hibernate4.2+struts2.3.29整合所需jar包

    - **snappy-java-1.0.4.1.jar**:Snappy 是一种高效的压缩和解压缩算法,可能用于提高数据传输或存储的效率。 - **mysql-connector-java-5.1.31-bin.jar**:这是MySQL的Java连接器,用于连接Java应用程序到MySQL...

    lib3.rar 我用的jar

    2. **snappy-java-1.0.4.1.jar** - 这是Snappy压缩库的Java实现,用于提高数据压缩和解压缩的速度。Snappy常被用于大数据处理和Hadoop生态系统中。 3. **spring-core-3.2.1.RELEASE.jar** - Spring框架的核心组件,...

    java自动备份

    此外,为了提高效率和节省存储空间,可以考虑使用压缩技术,如使用`java.util.zip`包中的`ZipOutputStream`和`ZipInputStream`进行文件的压缩和解压缩。这样,备份的文件可以以更小的体积存储,同时在需要时能快速...

    ssm195基于java的小型超市管理系统+vue.zip

    1. **Spring框架**:Spring是Java开发中的核心框架,提供了AOP(面向切面编程)、IOC(控制反转)和强大的DI(依赖注入)功能,便于模块化开发和解耦合。 2. **Spring MVC**:作为Spring的一部分,Spring MVC负责...

    OceanBase介绍.pptx

    系统还支持性能优化,例如自研的Libeasy网络框架可以处理高频率请求,内存优化技术如Lock-free内存B树提高数据访问速度,快速压缩和解压缩算法节省存储空间,以及OceanBase特有的异步复制技术和并发日志回放技术保证...

    java 文件上传下载 断点续传 断点上传

    - `java.util.zip`和`java.util.concurrent`:前者用于压缩和解压缩文件,后者提供并发工具类,如`ExecutorService`,以异步处理文件传输,提高性能。 - `HTTP Range头`:在HTTP协议中,`Range`头可以指示客户端只...

    mavenproject工程列表说明1

    4. **Apache Commons Compress**: `commonscompressdemo`展示了如何使用Apache Commons Compress库来压缩和解压缩文件,包括对Tar格式的支持,这对于文件存储和传输非常有用。 5. **Elasticsearch**: `Elastic...

    基于ssm南阳特产销售平台.zip

    1. **Spring框架**:Spring是Java开发的核心组件,提供依赖注入(DI)和面向切面编程(AOP),用于管理对象的生命周期和解耦合。 2. **SpringMVC**:Spring MVC是Spring框架的一个模块,负责处理HTTP请求,实现...

    Java 实现的微云盘系统(仿百度云盘)

    - **文件操作工具类**:项目中的Utils模块可能包含一系列静态方法,用于文件的读写、转换、压缩和解压缩等操作。 - **网络通信工具类**:为了优化网络通信,Utils可能包含了处理HTTP请求、响应的工具,如HTTP...

    ssm190基于ssm的“游侠”旅游信息管理系统+jsp.zip

    2. **SpringMVC**:Spring的MVC模块用于构建Web应用程序,负责处理请求、转发响应,并提供模型-视图-控制器模式的实现。 3. **MyBatis**:MyBatis是一个持久层框架,简化了SQL操作,将SQL语句与Java代码分离,提高了...

    upload-portlet:波形ECG V3.0的上传页面

    在处理ECG数据时,考虑到数据量和格式,portlet可能还涉及数据压缩和解压缩技术,如gzip或zip,以减少网络传输的负担。此外,为了确保数据的准确性,可能还会使用到数据验证和格式检查机制,例如验证文件类型是否为...

    TalkRoom

    此外,考虑到图片的压缩和解压缩,可能会用到如Apache Commons IO库等工具。 支持超链接是"TalkRoom"增强用户体验的一个特性。这需要解析和处理URL,可以使用Java的java.net.URL类来实现。同时,为了在聊天窗口中...

    exercicefinal

    又或者是构建一个文件管理系统,利用os和shutil模块操作文件和目录,进行文件的压缩和解压缩。 Python还有丰富的第三方库,如requests用于网络请求,BeautifulSoup或Scrapy用于网页抓取,scikit-learn用于机器学习...

    Java 工具类总结目录(分享)

    - 如`Apache Commons Compress`库,提供了对各种文件打包和压缩格式的支持,如ZIP、TAR、GZIP等,简化了文件压缩和解压缩的操作。 6. **Configuration**: - 配置管理类库如`Apache Commons Configuration`,使得...

    Scissor Tools-开源

    8. **文件操作**:简化文件读写、复制、删除等操作,同时提供文件压缩和解压缩功能。 9. **代码生成**:可能包含代码生成工具,能够自动生成常见的DAO、Service、Controller等代码,减少重复工作。 10. **单元测试...

Global site tag (gtag.js) - Google Analytics