日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 的io流需要学吗_Java的IO流之字节流,必须要学得内容,你会嘛?

發布時間:2024/9/27 java 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 的io流需要学吗_Java的IO流之字节流,必须要学得内容,你会嘛? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原標題:Java的IO流之字節流,必須要學得內容,你會嘛?

伙伴們~

端午節過的如何呀~

有沒有很開心呀~

假期已過咱們繼續開動了

IO流

先來認識一下IO流:

IO流用來處理設備之間的數據傳輸,Java對數據的操作是通過流的方式,用于操作流的類都在IO包中。

1)流按流向分為兩種:

輸入流,輸出流。

2)流按操作類型分為兩種:

字節流 :

字節流可以操作任何數據,因為在計算機中任何數據都是以字節的形式存儲的

字節流的抽象父類:

InputStream/OutputStream

字符流 :

字符流只能操作純字符數據,比較方便。

字符流的抽象父類:

Reader/Writer

3)IO程序書寫規范

使用前,導入IO包中的類

使用時,進行IO異常處理

使用后,釋放資源

字節流

今天我們先來認識一下字節流

1)FileInputStream

字節流的輸入,使用read()方法一次讀取一個字節

把文件 zzz.txt 中的字節讀取到控制臺上~因為a、b、c等英文字符在底層是用 ASC 碼的數字表示的,所以我們在控制臺上讀取的結果是數字

注意:

read()方法的返回值是int

因為字節輸入流可以操作任意類型的文件,比如圖片音頻等,這些文件底層都是以二進制形式的存儲的。

如果每次讀取都返回 byte,有可能在讀到中間的時候遇到 {{111111111:0}}(byte類型的-1),read() 方法遇到 -1 就會停止不讀,后面的數據也就讀不到了,

所以在讀取的時候用 int 類型接收,像{{11111111:0}}會在其前面補上24個0,湊足4個字節,那么 byte 類型的 -1就變成 int 類型的 255 了。這樣可以保證整個數據讀完,而結束標記的-1就是 int 類型。

2)FileOutputStream

字節輸出流 write() 一次寫出一個字節

把字節寫入到文件 yyy.txt 中

注:

1)如果不存在 yyy.txt 這個文件,程序會自動創建一個 yyy.txt

2)因為在執行 FileOutputStream() 方法的時候,會先把文件里面的內容清空,然后再來把我們要寫的東西寫入~

如果我們想要不刪出文件里面的內容而是追加內容該如何做呢?

在FileOutputStream的構造方法中,有一個構造方法,存在一個appen參數,表示追加的意思,我們在這邊設置一個 true ,表示我們是追加內容就可以了~

那么代碼應該這樣寫~

字節流的拷貝

現在輸入輸出我們都掌握了,就可以搞事情了,我們來做一個拷貝圖片的練習吧~

1)逐個字節的拷貝方式

這樣就可以把圖片copy了一份了~

上面這種通過逐個字節拷貝文件的方式,對小一點的文件還好,當對大一點文件進行拷貝的時候速度就會慢下來——效率太低~(在實際的開發中我們不考慮)

2)利用available()拷貝方法

查看API有如下的介紹

大致意思就是,available()方法可以獲取到我們將要 copy 的文件的所有字節個數~這樣我們就可以一次性讀取需要copy的文件的數據,然后在一次性的輸出出來~

但是這種方式也有一個弊端,比如我們想拷貝一個大一點的文件(像藍光電影這種有10+G大~),那么我們在拷貝之前就需要創建一個10+G大小的數組,要知道這些程序都是放在Java虛擬機中運行的,而Java虛擬機是虛擬在計算機的內存中(內存也不會全給Java虛擬機,一般Java的虛擬機也就100+M)就可能會導致內存溢出~,所以一般也是不推薦的~

3)定義小數組拷貝方式

這個方法綜合了上面的兩種方式~

所以推薦這種方式來拷貝文件

4)利用緩沖思想進行拷貝

字節流一次讀寫一個數組的速度明顯比一次讀寫一個字節的速度快很多,這是加入了數組這樣的緩沖區效果,java本身在設計的時候,也考慮到了這樣的設計思想,所以提供了字節緩沖區流

帶緩沖的拷貝

1)BufferedInputStream 內置了一個緩沖區(數組),BufferedInputStream 會一次性從文件中讀取8*1024個,存在緩沖區中,程序在讀取時,就不用找文件了,直接從緩沖區中獲取,直到緩沖區中所有的數據都被讀取過,BufferedInputStream才重新從文件中讀取8*1024個。

2)BufferedOutputStream也內置了一個緩沖區(數組),程序向流中寫出字節時,不會直接寫到文件,先寫到緩沖區中,直到緩沖區寫滿,BufferedOutputStream 才會把緩沖區中的數據一次性寫到文件里。

那么小數組的讀寫和帶Buffered的讀取哪個更快?

定義小數組如果是8*1024個字節大小和B uffered 比較的話,定義小數組會略勝一籌,因為讀和寫操作的是同一個數組,而Buffered操作的是兩個數組。

在緩沖中存在一個 flush() 刷新方法,可以把緩沖區中的內容輸出來~

flush() 和 close() 方法的區別

(偷個懶,就不寫代碼演示了)

flush()方法

用來刷新緩沖區的,刷新后可以再次寫出 。

close()方法

用來關閉流釋放資源的的,如果是帶緩沖區的流對象調用了 close() 方法,不但會關閉流,還會再關閉流之前刷新緩沖區,關閉后不能再進行寫出操作~

流的標準處理異常代碼

Java1.6版本及其以前的處理方式

try finally嵌套

原則就是當程序出現問題時,盡量把流關閉,不要占用資源~

Java 1.7的版本以后的寫法

原理

在 try() 中創建的流對象必須實現了 AutoCloseable 這個接口,實現了 AutoCloseable 接口以后 , 在 try 后面的大括號 {}中的讀寫代碼執行后,就會自動調用流對象的 close 方法將流關掉~ 返回搜狐,查看更多

責任編輯:

總結

以上是生活随笔為你收集整理的java 的io流需要学吗_Java的IO流之字节流,必须要学得内容,你会嘛?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。