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

歡迎訪問 生活随笔!

生活随笔

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

java

Java-字节流

發布時間:2023/12/29 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java-字节流 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、IO流概述和分類

IO流概述:

  • IO:輸入/輸出(Input/Output)
  • 流:是一種抽象概念,對數據傳輸的總稱。也就是說數據在設備間的傳輸稱為流,流的本質是數據傳輸
  • IO流就是用來處理設備間數據傳輸問題的
    • 常見的應用:文件復制;文件上傳;文件下載

IO流分類:

  • 按照數據的流向
    • 輸入流:讀數據
    • 輸出流:寫數據
  • 按照數據類型來分
    • 字節流:字節輸入流;字節輸出流
    • 字符流:字符輸入流;字符輸出流

一般來說,IO流的分類是按照數據類型來分的

字節流和字符流使用:

  • 如果數據通過Window自帶的記事本軟件打開,我們還可以讀懂里面的內容,就使用字符流,否則使用字節流。如果不知道該使用哪種類型的流,就使用字節流

2、字節流寫數據

字節流抽象基類

  • InputStream:這個抽象類是表示字節輸入流的所有類的超類
  • OutputStream:這個抽象類是表示字節輸入流的所有類的超類
  • 子類名特點:子類名稱都是以其父類名作為子類名的后綴

FileOutputStream:文件輸出流用于將數據寫入File

  • ?FileOutputStream?(String?name):創建文件輸出流以寫入具有指定名稱的文件

使用字節輸出流寫數據的步驟:

  • 創建字節輸出流對象(調用系統功能創建文件;創建字節輸出流對象;讓字節輸出流對象指向創建好的文件)
  • 調用字節輸出流對象的寫數據方法
  • 釋放資源(關閉此文件輸出流并釋放與此流相關聯的任何系統資源)
package ByteStream01;import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException;/*FileOutputStream:文件輸出流用于將數據寫入FileFileOutputStream(String name):創建文件輸出流以寫入具有指定名稱的文件。*/ public class FileOutputStream01 {public static void main(String[] args) throws IOException {//創建字節輸出流對象//FileOutputStream(String name):創建文件輸出流以寫入具有指定名稱的文件FileOutputStream fos=new FileOutputStream("D:\\Document\\Java\\myByteStream\\fos.txt");/*做三件事情:1、調用系統功能創建文件2、創建了字節輸出流對象3、讓字節輸出流對象指向創建好的文件*///void write (int b):將指定的字節寫入此文件輸出流fos.write(97); // fos.write(57); // fos.write(55);//最后都要釋放資源//void close():關閉此文件輸出流并釋放與此流關聯的所有系統資源。fos.close();} }

3、字節流寫數據的3種方式:

方法名說明

void write(int b)

將指定的字節寫入此文件輸出流,一次寫一個字節數據

void write(byte[] b)

將b.length字節從指定的字節數組寫入此文件輸出流,一次寫一個字節數組數據

void write(byte[] b,int off,int len)

將len字節從指定的字節數組開始,從偏移量off開始寫入此文件輸出流,一次寫一個字節數組的部分數據

package ByteStream01;import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets;/*構造方法:FileOutputStream(String name):創建文件輸出流以寫入具有指定名稱的文件。FileOutputStream(File File):創建文件輸出流以寫入由指定的File對象表示的文件。字節流寫數據的3種方式:void write(int b):將指定的字節寫入此文件輸出流,一次寫一個字節數據void write(byte[] b):將b.length字節從指定的字節數組寫入此文件輸出流,一次寫一個字節數組數據void write(byte[] b,int off,int len):將len字節從指定的字節數組開始,從偏移量off開始寫入此文件輸出流,一次寫一個字節數組的部分數據*/ public class FileOutputStream02 {public static void main(String[] args) throws IOException {//FileOutputStream(String name):創建文件輸出流以寫入具有指定名稱的文件。FileOutputStream fos = new FileOutputStream("D:\\Document\\Java\\myByteStream\\fos.txt");//new File(name)//FileOutputStream fos = new FileOutputStream(new File("D:\\Document\\Java\\myByteStream\\fos.txt"));//FileOutputStream(File File):創建文件輸出流以寫入由指定的File對象表示的文件。 // File file = new File("D:\\Document\\Java\\myByteStream\\fos.txt"); // FileOutputStream fos2 = new FileOutputStream(file); // FileOutputStream fos2 = new FileOutputStream(new File("D:\\Document\\Java\\myByteStream\\fos.txt"));//void write(int b):將指定的字節寫入此文件輸出流,一次寫一個字節數據 // fos.write(97); // fos.write(98); // fos.write(99); // fos.write(100); // fos.write(101);//void write(byte[] b):將b.length字節從指定的字節數組寫入此文件輸出流,一次寫一個字節數組數據//byte[] bys = {97, 98, 99, 100, 101};//byte[] getBytes():返回字符串對應的字節數組byte[] bys = "abcde".getBytes();//fos.write(bys);//void write(byte[] b,int off,int len):將len字節從指定的字節數組開始,從偏移量off開始寫入此文件輸出流,一次寫一個字節數組的部分數據//fos.write(bys,0,bys.length);fos.write(bys,1,3);//釋放資源fos.close();} }

4、字節流寫數據的兩個小問題:


?????? 1、字節流寫數據如何實現換行?
?????????? window:\r\n
?????????? linux:\n
?????????? mac:\r

?????? 2、字節流寫數據如何實現追加寫入?
?????????? public FileOutputStream(String name,boolean append)
???????????創建文件輸出流以寫入具有指定名稱的文件。如果第二個參數是true,則字節將寫入文件的末尾而不是開頭。

package ByteStream01;import java.io.FileOutputStream; import java.io.IOException;/*字節流寫數據的兩個小問題:1、字節流寫數據如何實現換行?window:\r\nlinux:\nmac:\r2、字節流寫數據如何實現追加寫入?public FileOutputStream(String name,boolean append)創建文件輸出流以寫入具有指定名稱的文件。如果第二個參數是true,則字節將寫入文件的末尾而不是開頭。*/ public class FileOutputStream03 {public static void main(String[] args) throws IOException {//創建字節輸出流對象 // FileOutputStream fos = new FileOutputStream("D:\\Document\\Java\\myByteStream\\fos.txt");FileOutputStream fos = new FileOutputStream("D:\\Document\\Java\\myByteStream\\fos.txt",true);//寫數據for (int i = 0; i < 10; i++) {fos.write("hello".getBytes());fos.write("\n".getBytes());}//釋放資源fos.close();} }

5、字節流寫數據加入異常處理

finally:在異常處理時提供finally塊來執行所有清除操作。比如說IO流中的釋放資源

特點:被finally控制的語句一定會執行,除非JVM退出

使用:

????????try{可能出現異常的代碼;}catch(異常類名 變量名){異常的處理代碼;}finally{執行所有清除操作;} package ByteStream01; /*字節流寫數據加異常處理finally:在異常處理時提供finally塊來執行所有清除操作。比如說IO流中的釋放資源特點:被finally控制的語句一定會執行,除非JVM退出使用:try{可能出現異常的代碼;}catch(異常類名 變量名){異常的處理代碼;}finally{執行所有清除操作;}*/import java.io.FileOutputStream; import java.io.IOException;public class FileOutputStream04 {public static void main(String[] args) { // try { // FileOutputStream fos = new FileOutputStream("D:\\Document\\Java\\myByteStream\\fos.txt"); // fos.write("hello".getBytes()); // fos.close(); // } catch (IOException e) { // e.printStackTrace(); // }//加入finally類來實現釋放資源FileOutputStream fos = null;try {fos = new FileOutputStream("D:\\Document\\Java\\myByteStream\\fos.txt");fos.write("hello".getBytes());} catch (IOException e) {e.printStackTrace();} finally {if (fos != null) {try {fos.close();} catch (IOException e) {e.printStackTrace();}}}} }

6、字節流讀數據

一次讀一個字節數據

FileInputStream:從文件系統中的文件獲取輸入字節

  • FileInputStream(String name):通過打開與實際文件的連接來創建一個FileInputStream,該文件由文件系統中的路徑名name命名

使用字節輸入流讀取數據的步驟:

  • 創建字節輸入流對象
  • 調用字節輸入流對象的讀數據方法
  • 釋放資源
  • package ByteStream02;import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException;/*需求:把文件fos.txt中的內容讀取出來在控制臺輸出FileInputStream:從文件系統中的文件獲取輸入字節FileInputStream(String name):通過打開與實際文件的連接來創建一個FileInputStream,該文件由文件系統中的路徑名name命名使用字節輸入流讀取數據的步驟:創建字節輸入流對象調用字節輸入流對象的讀數據方法釋放資源*/ public class FileOutputStreamDemo01 {public static void main(String[] args) throws IOException {//創建字節輸入流對象//FileInputStream(String name)FileInputStream fis = new FileInputStream("D:\\Document\\Java\\myByteStream\\fos.txt");//調用字節輸入流對象的讀數據方法//int read():從該輸入流讀取一個字節的數據;如果達到文件的末尾,返回-1/*//第一次讀取數據int by = fis.read();System.out.println(by);System.out.println((char) by);//第二次讀取數據by = fis.read();System.out.println(by);System.out.println((char) by);*//*int by= fis.read();while(by!=-1){System.out.print((char) by);by= fis.read();}*///優化上面的程序int by;/*(by = fis.read()) != -1:fis.read():讀數據by = fis.read():把讀取到的數據賦值給byby != -1:判斷讀取到的數據是否是-1*/while ((by = fis.read()) != -1) {System.out.print((char) by);}//釋放資源fis.close();} }

    一次讀一個字節數組數據

    需求:把文件fos.txt中的內容讀取出來在控制臺輸出

    使用字節輸入流讀取數據的步驟:

  • 創建字節輸入流對象
  • 調用字節輸入流對象的讀數據方法
  • 釋放資源
  • package ByteStream02;import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException;/*需求:把文件fos.txt中的內容讀取出來在控制臺輸出使用字節輸入流讀取數據的步驟:創建字節輸入流對象調用字節輸入流對象的讀數據方法釋放資源*/ public class FileOutputStreamDemo02 {public static void main(String[] args) throws IOException {//創建字節輸入流對象FileInputStream fis = new FileInputStream("D:\\Document\\Java\\myByteStream\\fos.txt");//調用字節輸入流對象的讀數據方法//int read(byte[] b):從該輸入流讀取最多b.length個字節的數據到一個字節數組/*byte[] bys=new byte[5];//第一次讀取數據int len = fis.read(bys);System.out.println(len);//String (byte[] bytes)//System.out.println(new String(bys));System.out.println(new String(bys,0,len));//第二次讀取數據len = fis.read(bys);System.out.println(len);//System.out.println(new String(bys));System.out.println(new String(bys,0,len));//第三次讀取數據len = fis.read(bys);System.out.println(len);//String (byte[] bytes,int offset,int length)System.out.println(new String(bys,0,len));/*hello\nworld\n第一次:hello第二次:\nworl第三次:d\njav*/byte[] bys = new byte[1024];//1024及其整數倍int len;while ((len = fis.read(bys)) != -1) {System.out.print(new String(bys,0,len));}//釋放資源fis.close();} }

    7、字節緩沖流

    字節緩沖流

    • BufferOutputStream:該類實現緩沖輸出流。通過設置這樣的輸出流,應用程序可以向底層輸出流寫入字節,而不必為寫入的每個字節導致底層系統的調用
    • BufferInputStream:創建BufferInputStream將創建一個內部緩沖區數組。當從流中讀取或跳過字節時,內部緩沖區將根據需要從所包含的輸入流中重新填充,一次很多字節

    構造方法

    • 字節緩沖輸出流:BufferOutputStream(OutputStream out)
    • 字節緩沖輸入流:BufferInputStream(InputStream in)

    為什么構造方法需要的是字節流,而不是具體的文件或者路徑?

    • 字節緩沖流僅僅提供緩沖區,而真正的讀寫數據還得依靠基本的字節流字節流對象進行操作
    package BufferStream;import java.io.*;/*字節緩沖流:BufferOutputStream:該類實現緩沖輸出流。通過設置這樣的輸出流,應用程序可以向底層輸出流寫入字節,而不必為寫入的每個字節導致底層系統的調用BufferInputStream:創建BufferInputStream將創建一個內部緩沖區數組。當從流中讀取或跳過字節時,內部緩沖區將根據需要從所包含的輸入流中重新填充,一次很多字節構造方法:字節緩沖輸出流:BufferOutputStream(OutputStream out)字節緩沖輸入流:BufferInputStream(InputStream in)*/ public class BufferStreamDemo01 {public static void main(String[] args) throws IOException {//字節緩沖輸出流:BufferOutputStream(OutputStream out) // FileOutputStream fos = new FileOutputStream("D:\\Document\\Java\\myByteStream\\bos.txt"); // BufferedOutputStream bos = new BufferedOutputStream(fos);/*BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\Document\\Java\\myByteStream\\bos.txt"));//寫數據bos.write("hello\n".getBytes());bos.write("world\n".getBytes());bos.write("java\n".getBytes());//釋放資源bos.close();*///字節緩沖輸入流:BufferInputStream(InputStream in)BufferedInputStream bis=new BufferedInputStream(new FileInputStream("D:\\Document\\Java\\myByteStream\\bos.txt"));//一次讀取一個字節數據 // int by; // while((by=bis.read())!=-1){ // System.out.print((char)by); // }//一次讀取一個字節數組數據byte[] bys=new byte[1024];int len;while ((len=bis.read(bys))!=-1){System.out.print(new String(bys,0,len));}//釋放資源bis.close();} }

    總結

    以上是生活随笔為你收集整理的Java-字节流的全部內容,希望文章能夠幫你解決所遇到的問題。

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