字节流(IO流)概述、字节流(写入/输出)数据(3种)和换行、追加写入、异常处理办法、字节缓冲流、字节流复制图片视频案例
生活随笔
收集整理的這篇文章主要介紹了
字节流(IO流)概述、字节流(写入/输出)数据(3种)和换行、追加写入、异常处理办法、字节缓冲流、字节流复制图片视频案例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- IO流概述和分類
- 字節流寫入數據(OutputStream)
- FileOutputStream
- 字節流寫數據的3種方式
- 字節流寫入數據的兩個小問題
- 字節流寫數據如何換行
- 字節流如何實現追加寫入
- 字節流寫入數據加入異常處理
- 字節流讀取數據(InputStream)
- FileInputStream
- 字節流讀取數據的三種方法
- 字節緩沖流(Buffer)
- BufferedOutputStream
- BufferedInputStream
- 字節流復制圖片視頻案例(附字節流和字節緩沖流速度比較)
- 復制圖片
- 復制視頻
IO流概述和分類
IO流分類:
輸入流(in):讀數據(read)
輸出流(out):寫數據(write)
字節流:字節輸入流、字節輸出流
字符流:字符輸入流、字符輸出流
字節流寫入數據(OutputStream)
注意:
- InputStream:表示字節輸入流所有類的超類
- OutputStream:表示輸出流所有類的超類
- 子類名特點:子類名稱都是以其父類名作為子類名的后綴
FileOutputStream
FileOutputStream:所在包:java.io public class FileOutputStreamextends OutputStreamFileOutputStream:文件輸出流用于將數據寫入File:
構造方法FileOutputStream(String name):
字節流寫數據的3種方式
| void write(int b) | 將指定的字節寫入此文件輸出流,一次寫一個字節數據 |
| void write(byte[] by) | 將b.length字節從指定的字節數組寫入子文件輸出流,一次寫一個字節數組數據 |
| void write(byte[] b,int off,int len) | 將len字節從指定的字節數組開始,從偏移量off開始寫入此文件輸出流,一次寫一個字節數組的部分數據(以off為索引寫len長度的數據) |
| void flush() | 清空流并強制將緩沖區中所有數據寫入流中 |
代碼示例:
輸出流的兩種構造函數 FileOutputStream(String name); FileOutputStream(File file);FileOutputStream f1 = new FileOutputStream();f1.write(97); //void write(int b)寫入數據 字符數據在文件中顯示abyte[] b = {97,98,99,100}; f1.write(b); //void write(byte[] b)寫入數據 字符數據在文件中顯示abcdbyte[] c = "abcdefghi".getBytes(); //利用String.getBytes()方法獲取byte數組 更直觀的定義文件中的字符數據f1.write(c); //void write(byte[] b)寫入數據 字符數據在文件中顯示abcdefghif1.write(c,3,3); //void write(byte[] b,int off,int len)寫入數據 //從off索引開始往后輸出len長度的數據 輸出byte[3]--byte[6]的數據defgf1.close();字節流寫入數據的兩個小問題
字節流寫數據如何換行
寫完數據后,加上換行符: Windows:\r\n Linux:\n Mac:\r 例:f1.write(97); f1.write("\r\n".getBytes()); //注意換行符是String類型,需要用getBytes()方法將String類型轉換為byte[]類型才能完成轉換字節流如何實現追加寫入
public FileOutputStream(String name,boolean append); 創建文件輸出流以指定的名稱寫入文件。 如果第二個參數值為true,則字節將寫入文件的末尾而不是開頭(在沒有append參數的情況下默認寫入文件開頭字節流寫入數據加入異常處理
finally:在異常處理時提供finally塊來執行所有清除操作。比如IO流中的釋放資源 特點:被finally控制的語句一定會執行,除非JVM退出字節流異常處理標準格式:
try{可能出現異常的代碼; }catch(異常類名 變量名){變量名.異常處理代碼; }finally{執行所有清除操作; }代碼示例:
Public static void main(String[] args){FileOutputStream f1 = null; //定義在try外面避免執行finally語句時找不到f1變量 注意在外部定義時要進行初始化(f1=null)try{f1 = new FileOutputStream("D:\\java000\\test001\\java.txt");f1.write(97);}catch(IOException e){e.printStackTrace();}finally{try{if(f1 != null)f1.close(); //執行f1=new FileOutputStream("D:\\java000\\test001\\java.txt"); //時因該考慮初始化失敗問題所以加入if避免空指針異常}catch(IOException e){e.printStackTrace();}} }字節流讀取數據(InputStream)
使用字節流讀數據的步驟:
1.創建字節輸入流對象
2.調用字節輸入流對象的讀數據方法
3.釋放資源
FileInputStream
所在包:java.io public class FileInputStreamextends InputStream 構造函數:FileInputStream(String name);代碼示例:
FileInputStream f1 = new FileInputStream("test001\\java.txt");int by=f1.read(); //調用字節輸入流對象的讀數據方法System.out.print(by); f1.close();字節流讀取數據的三種方法
| int read() | 從這個輸入流讀取一個字節的數據 |
| int read(byte[] b) | 讀取b.length字節的數據,從這個輸入流到一個字節數組 |
| int read(byte[] b,int off,int len) | 讀取len字節的數據,從這個輸入流到一個字節數組 |
| long skip(long n) | 從輸入流跳過,丟棄n字節的數據輸入流 |
代碼示例:
read(int b); 例:FileInputStream f1 = new FileInputStream("D:\\java000\\test001\\java.txt");int by;while((by = f1.read())!=-1){System.out.print((char)by);}f1.close();read(byte[] b); 例:FlieInputStream f1 = new FlieInputStream("D:\\java000\\test001\\java.txt");byte[] by = new byte[1024] //一般長度設置為1024的倍數int len; while(( len = f1.read(by) ) != -1){ //注意:len=f1.read(by);中len表示f1文件中讀到的字符數量 //當byte[n]中n小于len時 read()讀出的是n長度的字符System.out.print( new String(by) ); //len表示read方法所讀到的字符數量}f1.close();read(byte[] b,int off,intlen); 例:FileInputStream f1 = new FileInputStream("D:\\java000\\test001\\java.txt");byte[] b = new byte[1024];int len;while( ( len=f1.read(by) )!=-1 ){System.out.print( new String(by,0,len) ); //new String(byte[] bytes,int offset,int length): 通過使用平臺默認字符集解碼指定的字節子陣列來構造新的String. 就是轉換byte[0]~byte[len]成為新的String }字節緩沖流(Buffer)
BufferedOutputStream
所在包:java.io public class BufferedOutputStreamextends FilterOutputStream該類實現緩沖輸出流。通過設置這樣的輸出流,應用程序可以向底層輸出流寫入字節,而不必為寫入的每個字節導致底層系統的調用
BufferedInputStream
所在包:java.io public class BufferedInputStreamextends FilterInputStream創建BufferedInputStream將創建一個內部緩沖區數組。當從流中讀取或跳過字節時,內部緩沖區將根據需要從所包含的輸入流中重新填充,一次很多字節。
構造方法:
代碼示例:
字節緩沖輸出流: BufferedOutputStream bf1 = new BufferedOutputStream( new FileOutputStream("test001\\java.txt") ); bf1.write("abcdefg\r\n".getBytes); //String轉換為byte類型用String.Bytes();方法 bf1.close();字節緩沖輸入流: BufferedInputStream bf2 = new BufferedInputStream( new FileInputStream("test001\\java.txt") ); byte[] by = new byte[1024]; int len; while( (len=bf2.read(by))!=-1 ){System.out.print( new String(by,0,len) ); } bf2.close();字節流復制圖片視頻案例(附字節流和字節緩沖流速度比較)
復制圖片
代碼示例:
使用字節數組讀寫復制即可:FileInputStream in = new FileInputStream("數據源文件");FileOutputStream out = new FileOutputStream("目的地文件");byte[] by=new byte[1024];int len;while( (len=in.read(by))!=-1 ){out.write(by,0,len);}in.close();out.close(); 注意:字節流復制可以復制任意文件流程:1.創建輸入流(InputStream)2.創建輸出流(OutputStream)3.循環復制 4.close釋放資源復制視頻
利用四種方法來復制視頻,并比較四種方法之間哪種方法最快1.基本字節流一次讀寫一個字節 //最慢2.基本字節流一次讀寫一個字節數組 //比第1種快60+倍3.字節緩沖流一次讀寫一個字節 //比第3種慢一點點4.字節緩沖流一次讀寫一個字節數組 //最快 時間記錄由System.currentTimeMillis();方法記錄 int start = System.currentTimeMillis(); int end = System.currentTimeMillis();代碼示例:
1.基本字節流一次讀寫一個字節: FileOutputStream fout1=new FileOutputStream("復制目的地");FileInputStream fin1=new FileInputStream("視頻源");int by;while( (by=fin1.read() ) != -1){fout1.write(by);}fout1.close();fin.close();2.基本字節流一次讀寫一個字節數組:FileOutputStream fout1=new FileOutputStream("復制目的地");FileInputStream fin1=new FileInputStream("視頻源");int len;byte[] by = new byte[1024];while( (len=fin1.read(by))!=-1 ){fout1.write(by,0,len); //將len字節從指定的字節數組開始,從偏移量off開始寫入此文件輸出流, //一次寫一個字節數組的部分數據(以off為索引寫len長度的數據)}fout1.close();fin.close();3.字節緩沖流一次讀寫一個字節:BufferedOutputStream bout1=new BufferedOutputStream("存入目標");BufferedInputStream bin1=new BufferedInputStream("目標源文件");int by;while( (by=bin1.read())!=-1 ){bout1.write(by);}bout1.close();bin1.close();4.字節緩沖流一次讀寫一個字節數組:BufferedOutputStream bout1=new BufferedOutputStream("存入目標");BufferedInputStream bin1=new BufferedInputStream("目標源文件");int len;byte[] by=new byte[1024];while( (len=bin1.read())!=-1 ){bout1.write(by,0,len);}bout1.close();bin1.close();總結
以上是生活随笔為你收集整理的字节流(IO流)概述、字节流(写入/输出)数据(3种)和换行、追加写入、异常处理办法、字节缓冲流、字节流复制图片视频案例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: KEBA控制器通过NT50连接西门子S7
- 下一篇: 手机怎样将PDF转为Word可编辑格式,