關於IO流製作簡單的複製張貼功能

2021-07-08 20:35:12 字數 1183 閱讀 2207

在用io流做複製貼上功能的時候,其實我是有很多版本的,可以說是從低階到高階吧,從懵懵懂懂到還知道是怎麼一回事,因為這一節課正式上課的時候我沒有去,只是聽了補課的內容,補課的內容講的又不是很多,我自己就用補課所講的知識做了乙個。現在總結一下自己的當時的想法:

先建立關聯檔案物件,建立兩個路徑,乙個是讀取的檔案路徑,另乙個是不存在檔案的路徑,但寫的程式會給自己建立乙個指定的檔案和檔名,我是通過陣列的方法把path裡面的所以位元組都讀出來存在乙個bytes[i]陣列裡面,而且這個陣列的長度剛好是讀檔案所包含的位元組長度。我後面這個for語句,我是想把陣列的位元組同for語句乙個乙個傳給寫的檔案直到把裡面的資料寫完。這次還是第一次接觸到這個異常,以前沒有想過,考慮程式會出現有可能的錯誤,提前丟擲異常,比如path的值可能是空的或是根本就不存在,就會報錯。io流比作是一根管道,當然我們不用的時候我們應該把它關了用了.close();也符合我們現實生活中應該不能浪費節約資源,這個想法很不錯。

下面是乙個比我這個要高階一點的複製貼上功能:

其他的都一樣只在演算法上不一樣,之前那個是設定乙個陣列,而且陣列的長度和所讀的檔案裡的位元組長度是一樣的,而這裡設定的這個陣列長度是2048個位元組,那麼所讀檔案裡的位元組被分為n個2048位元組,也就是2048的倍數,但是這樣容易出現乙個問題,就是不是所有讀的檔案的位元組數剛好是2048個位元組的倍數,那麼多出來的位元組會被寫進下乙個2048個位元組陣列裡,而有效位元組數又沒有2048個位元組,那麼會出現乙個現象,所複製的檔案會比原始檔要大,因為還有很多無效位元組在裡面,這樣不就是很不嚴謹,很不好了。那麼.write();裡有乙個方法,就是擷取一段進行寫的行為,我們可以列印i的值,最後乙個就是讀的檔案位元組的有效位元組。

列印出來-1就代表裡面已經讀完,那麼上一組是758個位元組,這樣就不會出現複製的檔案比原始檔多的現象,如果最後一組也是2048個位元組那麼這個複製出來的檔案就多出1290個位元組。當然根據檔案的大小來設定陣列的大小,還有學到了拿到系統時間的方法了,前後時間一減就知道複製了多長時間了。

自己的一些看法,多多指教!

io流的簡單總結

資料流分為輸入流 inputstream 和輸出流 outputstream inputstream屬於位元組輸入類,system.in 作為位元組輸入流類inputstream 的物件in 實現標準的輸入,其中有read方法從鍵盤接收資料 inputstream的子類fileinputstream...

io流的簡單總結

資料流分為輸入流 inputstream 和輸出流 outputstream inputstream屬於位元組輸入類,system.in 作為位元組輸入流類inputstream 的物件in 實現標準的輸入,其中有read方法從鍵盤接收資料 inputstream的子類fileinputstream...

IO流的簡單實現

熟練掌握io流的基本實現方式 如下 public class outputstreamdemo01 傳入位元組陣列 4 關閉資源 outputstream.close 執行結果 12zaga 如下 public class inputstreamdemo01 4 釋放資源 inputstream.c...