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指針,他指示每次讀取之後下一次要讀取的起始位置

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