复用InputStream的方法

InputStream只能单向读取一次,并且不支持reset()和mark(int),所以要想复用InputStream的话最好就是先存在一个地方。这里可以选择通过ByteArrayOutputStream存储。

1. 将InputStream转换成ByteArrayOutputStream

//将InputStream转换成ByteArrayOutputStream
private static ByteArrayOutputStream copyStream(InputStream in) throws IOException {
	ByteArrayOutputStream out =new ByteArrayOutputStream();
	byte[] buffer=new byte[1024];
	int len;
	while((len=in.read(buffer))>-1){
		out.write(buffer,0,len);
	}
	out.flush();
	in.close();
	return out;
}

2. 将ByteArrayOutputStream转成ByteArrayInputStream

//ByteArrayOutputStream转成ByteArrayInputStream 
ByteArrayInputStream byteIn=new ByteArrayInputStream(out.toByteArray());

这样在ByteArrayInputStream使用过一次之后,就可以通过reset()重新回到顶部(因为ByteArrayInputStream重写了**reset()mark(int)**方法),然后就可以再读一次啦。
因为ByteArrayInputStream是InputStream的子类,所以同样可以把它当成流来使用,不过是支持重复使用罢了。
比如:

3. 多次复用

String inStr= convertInputStream2String(ind);
byteIn.reset();
String inStr2= convertInputStream2String(ind);

其中convertInputStream2String(InputStream is)方法:

public static String convertInputStream2String(InputStream is){
	StringBuilder sb=new StringBuilder();
	String line=null;
	try(BufferedReader br=new BufferedReader(new InputStreamReader(is))){
		while((line=br.readLine())!=null){
			sb.append(line);
		}
	} catch (IOException e) {
		e.printStackTrace();
	}
	return sb.toString();
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值