zoukankan      html  css  js  c++  java
  • HTTP协议扫盲(六)InputStream的复用

    一、问题提出

    在进行网关引擎开发时,获取到一个http请求的inputstream后,可能要多次利用它进行read操作。由于流读过一次就不能再读了,所以需要实现InputStream的复制。

    而InputStream对象本身不能复制,因为它没有实现Cloneable接口。

    二、解决方案

    1、方案一:使用ByteArrayOutputStream<->InputStream

    此时,可以先把InputStream转化成ByteArrayOutputStream,后面要使用InputStream对象时,再从ByteArrayOutputStream转化回来就好了。代码实现如下:

    InputStream input = httpconn.getInputStream(); 

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    byte[] buffer = new byte[1024];
    int len;
    while ((len = input.read(buffer)) > -1 ) {
        baos.write(buffer, 0, len);
    }
    baos.flush();

    InputStream stream1 = new ByteArrayInputStream(baos.toByteArray());  //TODO:显示到前台
    InputStream stream2 = new ByteArrayInputStream(baos.toByteArray());   //TODO:本地缓存

    这种适用于一些不是很大的流,因为缓存流是会消耗内存的。

    2、方案二:使用流的mark 和 reset方法

    参见链接:

    inputstream复制:http://www.cnblogs.com/happyaday/p/4616023.html

    对象克隆:https://zhidao.baidu.com/question/181598914089683044.html

  • 相关阅读:
    PHP中关于字符串的连接
    好用的FireFox(FF)插件
    Scripted Operation
    Scripted device
    chgrp chown
    wait_for_devices
    mysql create user
    mysql
    create user mysql
    Inserting/Removing shutters and filters
  • 原文地址:https://www.cnblogs.com/lexiaofei/p/7298045.html
Copyright © 2011-2022 走看看