java的IO流重用

使用jersey的过滤器获取参数时发现,用

InputStream entityStream = requestContext.getEntityStream();

获取转换完成之后,进入到接口中参数就消失了,查阅资料之后发现是转换成流之后只能使用一次,所以要在转换器中重新set进一个流

//支持流重用
        InputStream entityStream = requestContext.getEntityStream();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len;
        while ((len = entityStream.read(buffer)) > -1) {
            baos.write(buffer, 0, len);
        }
        baos.flush();
        String requestStr = this.inputStreamToString(new ByteArrayInputStream(baos.toByteArray()));
        requestContext.setEntityStream(new ByteArrayInputStream(baos.toByteArray()));

        String[] arrs = requestStr.split("&");
        LinkedList<String> param = Lists.newLinkedList();
        if(null!=arrs){
            for (int i=0;i<arrs.length;i++){
                param.add(arrs[i]);
            }
        }
//获取参数的方法
public String inputStreamToString(InputStream in) throws IOException {
        StringBuffer out = new StringBuffer();
        byte[] b = new byte[4096];
        for (int n; (n = in.read(b)) != -1;) {
            out.append(new String(b, 0, n));
        }
        return out.toString();
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,860评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,935评论 6 342
  • 1 IONo18 1.1IO框架 【 IO:Input Output 在程序运行的过程中,可能需要对一些设备进...
    征程_Journey阅读 977评论 0 1
  • 老人!老人! 母亲常说:“父母健在,儿女欢膝,就是最大的幸福,朦朦你要好好珍惜。”眼...
    ICL阅读 742评论 0 1
  • 从前有一只叫啫啫的小猪 它在星期四的下午爬上烟囱 看着它生活了好几年的小岛 海港的渔船来来往往 白色的鸟儿起起落落...
    今年雨水特别多阅读 295评论 0 0