InputStream 的坑!

这两天在做一个上传文件到oss,然后从oss获取文件发送邮件的case。

然后发现文件上传到了oss,但是取出来之后邮件的附件是空的。

找了半天也没有发现,之后通过日志发现他们的长度是不同的。

写了个测试demo

import org.apache.commons.io.IOUtils;
import org.junit.Test;

import java.io.ByteArrayInputStream;
import java.io.InputStream;

public class TestInputStream {

    @Test
    public void demo(){

        try{
            // 创建一个InputStream
            InputStream inputStream = new ByteArrayInputStream(IOUtils.toByteArray("aaaaa"));
            System.out.println(IOUtils.toByteArray(inputStream).length);
            // 再次打印
            System.out.println(IOUtils.toByteArray(inputStream).length);


        }catch (Exception e){
            e.printStackTrace();
        }



    }
}



输出发现不同。很坑 真的坑!!

有人这样比喻,InputStream就类比成一个杯子,杯子里的水就像InputStream里的数据,你把杯子里的水拿出来了,杯子的水就没有了,InputStream也是同样的道理!!

深入了解发现InputStream不能读取两次是因为,在InputStream读取的时候,会有一个pos指针,他指示每次读取之后下一次要读取的起始位置

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章