PrintStream流:
PrintStream流是列印流,PrintStream的對象能夠調用列印方法,可以将内容列印到文本裡。
代碼示例:
<a href="https://s2.51cto.com/oss/201710/27/d4ef48d7c80f734c8450f222cc7ae42f.png" target="_blank"></a>
運作結果:
<a href="https://s5.51cto.com/oss/201710/27/34885cb941a93f3bbabf24b00546943f.png" target="_blank"></a>
在參數裡的FileOutputStream裡可以改為追加模式:
<a href="https://s2.51cto.com/oss/201710/27/8f5ca86068af6d4b2993c8d7e713b6da.png" target="_blank"></a>
<a href="https://s3.51cto.com/oss/201710/27/ee8fdfd6b1e124cb6c50478ffc7a8e44.png" target="_blank"></a>
還可以替換系統的out輸出通道,替換後列印的内容就會出現在指定的文本中,控制台則不會有顯示:
<a href="https://s1.51cto.com/oss/201710/27/1de3c62cc4d5fc1439d7f2d15f14f560.png" target="_blank"></a>
<a href="https://s5.51cto.com/oss/201710/27/5c4f6ebfddb7bb3a283aa8b8f70a50cd.png" target="_blank"></a>
<a href="https://s5.51cto.com/oss/201710/27/ac2a2d77404a7b2a76f7ddb0ce9c7de9.png" target="_blank"></a>
ByteArrayInputStream/ByteArrayOutputStream流:
ByteArrayInputStream是包裝流,相當于可以将一個byte數組轉換成InputStream類型的對象。例如在某個情況下,你手裡隻有一個byte數組,但是你卻要調用一個參數為InputStream類型的方法。如果使用笨方法的話,就得先把這個數組使用FileOutputStream流先輸出到文本裡,再使用FileInputStream流将文本讀取出來,然後才将這個FileInputStream的對象傳遞到那個方法上去,從過程也可以看出這樣就是繞了一大圈。
示意圖:
<a href="https://s1.51cto.com/oss/201710/27/5c0b28f975d4c3093d8b17f26c5de579.png" target="_blank"></a>
雖然笨方法是麻煩,但是現在ByteArrayInputStream流的出現已經解決了這個問題,使用這個流就不需要繞這麼大一圈了,直接把byte數組交給ByteArrayInputStream流的構造器,然後使用ByteArrayInputStream的對象就可以了,是不是有點像給byte數組披上了一個流的衣服,給數組對象披上這個衣服後就包裝成了InputStream類型的對象,是以稱之為包裝流。
示意圖:
<a href="https://s5.51cto.com/oss/201710/27/053dde350702ed0c7d7a372e9dcbb277.png" target="_blank"></a>
代碼示例:
<a href="https://s2.51cto.com/oss/201710/27/a7999b6ad0fffdc20e1680559c96d974.png" target="_blank"></a>
<a href="https://s4.51cto.com/oss/201710/27/58a1809269c773e1ab00676041eba8ee.png" target="_blank"></a>
ByteArrayOutputStream是截取流,能夠把輸出的内容截取存儲到數組中。其實這個流就是和包裝流反了過來一下,包裝流是将一個byte數組轉換成InputStream類型的對象,截取流則是把OutputStream類型的對象轉換成了byte數組,是以才能實作到截取的效果。
<a href="https://s1.51cto.com/oss/201710/27/ca549cb74664f7182d1c00dc4f243122.png" target="_blank"></a>
<a href="https://s1.51cto.com/oss/201710/27/2fd5aa1ab0d82fe3c875d7a2ce1a1982.png" target="_blank"></a>
MD5加密:
MD5是一種隻能加密不能解密的加密算法,這個算法有一個特點:隻要是兩個檔案的位元組内容是一緻的,加密出來的密匙就是一緻的,但是兩個檔案的位元組稍微有一個位元組不一樣,整個加密出來的密匙就會完全不一樣。
<a href="https://s5.51cto.com/oss/201710/27/0d210bead67a6383ddb9d89b0e7a2523.png" target="_blank"></a>
文本内容:
<a href="https://s3.51cto.com/oss/201710/27/fddb9480da2f41c379cd3a1d75ddd8f7.png" target="_blank"></a>
<a href="https://s3.51cto.com/oss/201710/27/ed5ea9fe73412b4914e67239d3711f95.png" target="_blank"></a>
改動一下檔案的内容後加密出來的密匙就會完全不一樣了:
<a href="https://s1.51cto.com/oss/201710/27/06689dfffbe95740a8658b8254d47996.png" target="_blank"></a>
<a href="https://s1.51cto.com/oss/201710/27/c80fbb27ceead9925635d4ec1d53f780.png" target="_blank"></a>
<a href="https://s5.51cto.com/oss/201710/27/ed7b744a109a9def2cd9feecdb549463.png" target="_blank"></a>
因為MD5的這種特性,可以用來做秒傳和網盤之類的軟體,秒傳的原理就是判斷你所上傳的檔案内容和伺服器裡的密匙加密的檔案内容是否一緻,一緻的話就直接不需要上傳了,是以就“秒傳”了。網盤也是差不多,其實網盤裡的檔案大家用的都是同一份,你上傳的檔案隻要是伺服器裡有的就不會再上傳了,伺服器裡隻會存儲一份檔案,是以大家用的檔案都是同一份。
需要注意的是:使用MD5算法加密文字内容的時候需要進行嵌套加密,不然是可以被破解的,隻有嵌套加密後的文字内容才無法被破解。
16位流介紹:
16位流是基于8位流之上發展出來的,又叫文字操作流,是用來處理文字上的事情的,它也就隻能處理文字上的事情。
16流裡的最高抽象類:
Reader:讀取
Writer:輸出
其實就是和InputStream/OutputStream意思是一樣的
16流裡的主要方法:
FileReader
FileWriter
以上兩個方法是檔案讀取和檔案輸出流
BufferedReader
BufferedWriter
以上兩個方法是緩存流,同樣的預設緩沖池也是8k
PrintWriter
列印流,和PrintStream的作用是一樣的
CharArrayReader
CharArrayWriter
以上兩個方法是包裝流和截取流,和ByteArrayInputStream/ByteArrayOutputStream流作用是一樣的。隻不過一個是char數組類型,一個byte數組類型。
InputStreamReader
此方法可以使8位流轉換成16位輸入
OutputStreamWriter
此方法可以使16位流轉換成8位流輸出
<b>本文轉自 ZeroOne01 51CTO部落格,原文連結:http://blog.51cto.com/zero01/1976627,如需轉載請自行聯系原作者</b>