欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

InputStream只能读取一次,如何实现复用?

程序员文章站 2022-03-10 14:13:19
...

需要对同个文件流进行两个操作,一个是上传文件存储到当前结点,一个是同步文件到其他结点。由于流只能读取一次。于是要想办法让流可以重复使用。

public class BaseFileService {

    /**
     * 把InputStream首先转换成byte[].
     * @param source
     * @return
     * @throws IOException
     */
    protected byte[] getBytes(InputStream source) throws IOException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len;
        while ((len = source.read(buffer)) > -1 ) {
            baos.write(buffer, 0, len);
        }
        baos.flush();
        return baos.toByteArray();
    }
}
//把InputStream首先转换成ByteArrayOutputStream.然后你就可以任意克隆你需要的InputStream了
byte[] dataBytes = getBytes(source);
InputStream in1 = new ByteArrayInputStream(dataBytes);
InputStream in2 = new ByteArrayInputStream(dataBytes);

 

 

相关标签: Java