1.inputStream.markSuppored() == true;

可以使用mark()和reset()来实现二次读取

2.当inputStream不支持mark和reset时,

从StackoverFlow找到答案

 https://stackoverflow.com/questions/9501237/read-stream-twice/9501403#9501403

You can use org.apache.commons.io.IOUtils.copy to copy the contents of the InputStream to a byte array, and then repeatedly read from the byte array using a ByteArrayInputStream. E.g.:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
org.apache.commons.io.IOUtils.copy(in, baos);
byte[] bytes = baos.toByteArray();

// either
while (needToReadAgain) {
    ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
    yourReadMethodHere(bais);
}

// or
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
while (needToReadAgain) {
    bais.reset();
    yourReadMethodHere(bais);
}
posted on 2018-04-23 17:15  YKKKK  阅读(533)  评论(0编辑  收藏  举报