寫入文件視頻方法_第1頁
寫入文件視頻方法_第2頁
寫入文件視頻方法_第3頁
寫入文件視頻方法_第4頁
寫入文件視頻方法_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

寫入文件視頻方法.doc 免費下載

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、./jjtech/archive/2011/04/17/2019210.htmlFileInputStream/FileOutputStream的應用 這是一對繼承于InputStream和OutputStream的類,用于本地文件讀寫(二進制格式讀寫并且是順序讀寫,讀和寫要分別創(chuàng)建出不同的文件流對象); 本地文件讀寫編程的基本過程為: 生成文件流對象(對文件讀操作時應該為FileInputStream類,而文件寫應該為FileOutputStream類); 調用FileInputStream或FileOutputStream類中的功能函數(shù)如read(

2、)、write(int b)等)讀寫文件內容; 關閉文件(close())。 實例:流文件讀寫 流文件的單元是字節(jié),所以它不但可以讀寫文本文件,也可以讀寫圖片、聲音、影像文件,這種特點非常有用,因為我們可以把這種文件變成流,然后在網(wǎng)絡上傳輸。 問題是有了通用的流文件以后,為什么還要專門的字符流呢?這是因為文本可以用不同的方式存儲,可以是普通的文本(UTF-8編碼方式),ASCII文本和Unicode文本,字符流對象可以進行必要的轉換,從而讀出正確的文本。 有人認為流文件不能讀寫文本文件,這其實是個誤會,因為文本文件本質上也是由字節(jié)組成的,當然是流文件的一種。作為讀寫文件的全體,這是沒問題的,但

3、是,如果要處理每次讀入的內容,就最好使用字符流。 所以在文本文件處理時,使用字符流是個最常用的方法。 樣例: import java.io.*; public class FileStreamDemo public static void main(String args) throws IOException /創(chuàng)建兩個文件,face.gif是已經(jīng)存在文件,newFace.gif是新創(chuàng)建的文件 File inFile = new File(face.gif); File outFile = new File(newFace.gif); /創(chuàng)建流文件讀入與寫出類 FileInputStream

4、 inStream = new FileInputStream(inFile); FileOutputStream outStream = new FileOutputStream(outFile); /通過available方法取得流的最大字符數(shù) byte inOutb = new byteinStream.available(); inStream.read(inOutb); /讀入流,保存在byte數(shù)組 outStream.write(inOutb); /寫出流,保存在文件newFace.gif中 inStream.close(); outStream.close(); 實例:讀寫任意大

5、文件應用 因為byte數(shù)組最大存儲值不超過64M,所以當一個文件大于60M 的時候,需要分開幾個流操作。我們把上面的程序作一個修改,就可以寫入任意大小的文件。這個程序應用了FileInputStream類的方法如下: read(byte b,int off,int len) 把特定位置的流內容讀入數(shù)組,已經(jīng)讀入byte數(shù)組的內容,會在流文件中刪除。 程序運行的結果會產(chǎn)生一個新文件。 樣例: import java.io.*; public class FileStreamDemo2 public static void main(String args) throws IOException

6、/創(chuàng)建兩個文件 File inFile = new File(tcty36.rm); File outFile = new File(newtcty36.rm); /最大的流為60Mb,當文件的容量大于60Mb的時候便分開流 final int MAX_BYTE = 60000000; long streamTotal = 0; /接受流的容量 int streamNum = 0; /流需要分開的數(shù)量 int leave = 0; /文件剩下的字符數(shù) byte inOutb; /byte數(shù)組接受文件的數(shù)據(jù) /創(chuàng)建流文件讀入與寫出類 FileInputStream inStream = new

7、FileInputStream(inFile); FileOutputStream outStream = new FileOutputStream(outFile); /通過available方法取得流的最大字符數(shù) streamTotal = inStream.available(); /取得流文件需要分開的數(shù)量 streamNum = (int)Math.floor(streamTotal/MAX_BYTE); /分開文件之后,剩余的數(shù)量 leave = (int)streamTotal % MAX_BYTE; /文件的容量大于60Mb時進入循環(huán) if (streamNum 0) for(

8、int i = 0; i streamNum; +i) inOutb = new byteMAX_BYTE; /讀入流,保存在byte數(shù)組 inStream.read(inOutb, 0, MAX_BYTE); outStream.write(inOutb); /寫出流 outStream.flush(); /更新寫出的結果 /寫出剩下的流數(shù)據(jù) inOutb = new byteleave; inStream.read(inOutb, 0, leave); outStream.write(inOutb); outStream.flush(); inStream.close(); outStre

9、am.close(); 六、管道PipedInputStream/PipedOutputStream類: 當需要在兩個線程中讀寫數(shù)據(jù)的時候,由于線程的并發(fā)執(zhí)行,讀寫的同步問題可能會發(fā)生困難,這時候可以使用管道,管道事實上是一個隊列。 管道是由系統(tǒng)維護的一個緩沖區(qū),當然程序員也可以自己直接指定該緩沖區(qū)的大小(只需要設置管道流類中的PIPE_SIZE屬性的值)。當生產(chǎn)者生產(chǎn)出數(shù)據(jù)后,只需要將數(shù)據(jù)寫入管道中,消費者只需要從管道中讀取所需要的數(shù)據(jù)。利用管道的這種機制,可以將一個線程的輸出結果直接連接到另一個線程的輸入端口,實現(xiàn)兩者之間的數(shù)據(jù)直接傳送。 線程1線程2臨時文件管道 1管道的連接: 方法之一

10、是通過構造函數(shù)直接將某一個程序的輸出作為另一個程序的輸入,在定義對象時指明目標管道對象 PipedInputStream pInput=new PipedInputStream(); PipedOutputStream pOutput= new PipedOutputStream(pInput); 方法之二是利用雙方類中的任一個成員函數(shù) connect()相連接 PipedInputStream pInput=new PipedInputStream(); PipedOutputStream pOutput= new PipedOutputStream(); pinput.connect(pO

11、utput); 2管道的輸入與輸出: 輸出管道對象調用write()成員函數(shù)輸出數(shù)據(jù)(即向管道的輸入端發(fā)送數(shù)據(jù));而輸入管道對象調用read()成員函數(shù)可以讀起數(shù)據(jù)(即從輸出管道中獲得數(shù)據(jù))。這主要是借助系統(tǒng)所提供的緩沖機制來實現(xiàn)的。 實例:Java的管道的輸入與輸出 import java.io.*; public class PipedIO /程序運行后將sendFile文件的內容拷貝到receiverFile文件中 public static void main(String args) try /構造讀寫的管道流對象 PipedInputStream pis=new PipedInpu

12、tStream(); PipedOutputStream pos=new PipedOutputStream(); /實現(xiàn)關聯(lián) pos.connect(pis); /構造兩個線程,并且啟動。 new Sender(pos,c:text2.txt).start(); new Receiver(pis,c:text3.txt).start(); catch(IOException e) System.out.println(Pipe Error+ e); /線程發(fā)送 class Sender extends Thread PipedOutputStream pos; File file; /構造方

13、法 Sender(PipedOutputStream pos, String fileName) this.pos=pos; file=new File(fileName); /線程運行方法 public void run() try /讀文件內容 FileInputStream fs=new FileInputStream(file); int data; while(data=fs.read()!=-1) /寫入管道始端 pos.write(data); pos.close(); catch(IOException e) System.out.println(Sender Error +e

14、); /線程讀 class Receiver extends Thread PipedInputStream pis; File file; /構造方法 Receiver(PipedInputStream pis, String fileName) this.pis=pis; file=new File(fileName); /線程運行 public void run() try /寫文件流對象 FileOutputStream fs=new FileOutputStream(file); int data; /從管道末端讀 while(data=pis.read()!=-1) /寫入本地文件

15、 fs.write(data); pis.close(); catch(IOException e) System.out.println(Receiver Error +e); 七、隨機文件讀寫:RandomAccessFile類 它直接繼承于Object類而非InputStream/OutputStream類,從而可以實現(xiàn)讀寫文件中任何位置中的數(shù)據(jù)(只需要改變文件的讀寫位置的指針)。 編程步驟: 生成流對象并且指明讀寫類型; 移動讀寫位置; 讀寫文件內容; 關閉文件。 另外由于RandomAccessFile類實現(xiàn)了DataOutput與DataInput接口,因而利用它可以讀寫Java中

16、的不同類型的基本類型數(shù)據(jù)(比如采用readLong()方法讀取長整數(shù),而利用readInt()方法可以讀出整數(shù)值等)。 程序實例: 利用隨機數(shù)據(jù)流RandomAccessFile類來實現(xiàn)記錄用戶在鍵盤的輸入,每執(zhí)行一次,將用戶的鍵盤輸入存儲在指定的UserInput.txt文件中。 import java.io.*; public class RandomFileRW public static void main(String args) StringBuffer buf=new StringBuffer(); char ch; try while( (ch=(char)System.in.read() !=n) buf.append(ch); /讀寫方式可以為r or rw RandomAccessFile myFileStream=new RandomAccessFile(c:UserInput.txt,rw); myFileStream.seek(myFileStream.length() ; myFileStream.writeBytes(buf.t

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論