java流类图结构_java学习之IO流(学习之旅,一)
個人在學習IO流的時候看到如下所示java 流類圖結構的時候,我的感想是,這么多··處于蒙的狀態。
Java流類圖結構
這么多,沒有分類不好學,那我們就慢慢一口一口的吃,這樣每天學習一點就好了,其實很多類并不是常用的。
縷清思路很重要的,那么我轉一篇百度的文檔,寫的思路很清晰。
第一步,首先,明確IO流中有兩個主要的體系,即字節輸入流(InputStream)、輸出流(OutputStream)和字符輸入流(Reader)、輸出流(Writer)。其次,明確數據的來源和數據將要到達的目的地。
為啥要有字節流和字符流呢?多麻煩?
自然是有原因的:字節流能處理所有類型的數據(如圖片、avi等),而字符流只能處理字符類型的數據。
字節流:一次讀入或讀出是8位二進制。? ? ? 字符流:一次讀入或讀出是16位二進制。
第二步,明確將要操作的數據是否是純文本數據。如果數據源是純文本數據選Reader;數據源不是純文本數據選擇InputStream。如果數據目的地是純文本數據就選擇Writer;如果不是則選擇OutputStream。
第三步,明確具體的設備。即數據源是從哪個設備來的:是硬盤就加File;是鍵盤用System.in(是一個InputStream對象);是內存用數組;是網絡用Socket流。同樣目的是哪個設備:是硬盤就加File;是鍵盤用System.out(是一個OutoutStream對象);是內存用數組;是網絡用Socket流。
第四步,明確是否還需要其他額外功能呢,例如①是否需要較高的效率,即是否需要使用緩沖區,是就加上Buffered;②是否需要轉換,是,就使用轉換流,InputStreamReader 和OutputStreamWriter。
下面給出例子,具體的用法
上面百度文檔已經介紹的很清楚了,不過我還想更加詳細的了解一下輸入流和輸出流。在這里只介紹比較常用的方法,因為學習需要慢慢來·····
輸入字節流 InputStream
InputStream? ? ? 是所有的輸入字節流的父類,它是一個抽象類。(做什么用的呢?是個抽象類,不是接口,后期再研究)
下面我要考慮了,其實文件的輸出輸入是比較容易混的。那么我們怎么區分呢?
這樣,不管是輸入還是輸出,都是真對內存來說的,什么意思呢?
解釋一下:如果我們要上傳一個文件,有三個步驟。第一,讀取本地文件,就是先把硬盤上面的文件讀取到內存中,那么真對內存來說就是用輸入流(inputStream);第二,再把內存中的文件輸出(outStream),真對內存來說就是從內存輸出到服務器的硬盤上。
ByteArrayInputStream 、StringBufferInputStream、FileInputStream?是三種基本的介質流,它們分別從Byte 數組、StringBuffer、和本地文件中讀取數據。
其他兩種沒用過,?只就是??FileInputStream ,文件的上傳和下載用的都是這種流。
輸出字節流 OutputStream
OutputStream??是所有的輸出字節流的父類,它是一個抽象類。(和上面對應的==不懂,后期研究==)
這次寫文件下載用的就是這個父類。下面給出代碼
//創建輸出流
OutputStream out =response.getOutputStream();//創建數組
byte buffer[] = new byte[1024];int len = 0;//循環將輸入流中的內容讀取到緩沖區當中
while((len=in.read(buffer))>0){//輸出緩沖區的內容到瀏覽器,實現文件下載
out.write(buffer, 0, len);
}
用FileOutputStream 應該也是可以的吧,不過這就要指定具體的那個路徑進行文件寫出,也就是往硬盤寫入。
在此,我有個疑問,byte buffer[] 是否是緩沖區?
答案;不是緩沖流,不確定緩沖區做什么用的,后期再研究。
緩沖流:有四個,當然是字節緩沖輸入流BufferedInputStrean、字節緩沖輸出流OutputStreamWriter、 和字符的?BufferedReader、?BufferedWriter?增加緩沖功能,避免頻繁讀寫硬盤。
緩沖流大小通常是根據文件大小來進行匹配的,如果不進行設置有個默認值
今天就到這吧
總結
以上是生活随笔為你收集整理的java流类图结构_java学习之IO流(学习之旅,一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FTP 客户端C实现
- 下一篇: C#如何实现 ASCII码与字母的互相转