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

歡迎訪問 生活随笔!

生活随笔

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

java

一篇文章教你学会Java基础I/O流

發布時間:2025/1/21 java 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一篇文章教你学会Java基础I/O流 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

      • 一、初始IO流
        • 1、什么是流
        • 2、IO流的分類
      • 二、字節輸入輸出流
        • 1、字節輸入流(InputStream)
        • 2、字節輸出流(OutputStream)
        • 3、文件拷貝
      • 三、處理流和轉換流

寫在前面: 我是「境里婆娑」。我還是從前那個少年,沒有一絲絲改變,時間只不過是考驗,種在心中信念絲毫未減,眼前這個少年,還是最初那張臉,面前再多艱險不退卻。
寫博客的目的就是分享給大家一起學習交流,如果您對 Java感興趣,可以關注我,我們一起學習。

前言:為什么要寫這篇文章,由于長時間不使用I/O流操作,導致很多知識都朦朦朧朧似懂非懂,今天抽空把這部分內容認真復習了下,順便寫篇文章加深印象。I/O流在很多場景中都有使用,比如文件上傳下載、socket通信等。本文主要介紹常用字節流,其它字符流、轉換流用法類似就不一一介紹。

一、初始IO流

1、什么是流

數據的傳輸,可以看做是一種數據的流動,按照流動的方向,以內存為基準,分為輸入input 和輸出output ,即流向內存是輸入流,流出內存的輸出流。
Java中I/O操作主要是指使用java.io包下的內容,進行輸入、輸出操作。簡而言之,輸入也叫做讀取數據,輸出也叫做作寫出數據。

2、IO流的分類

按照流的方向可以分為:輸入流和輸出流

  • 輸入流 :把數據從其他設備上讀取到內存中的流。
  • 輸出流 :把數據從內存 中寫出到其他設備上的流。

按照流的類型可以分為:字節流和字符流

  • 字節流 :以字節為單位。
  • 字符流 :以字符為單位。

字節流和字符流的超類如下所示

流類型輸入流輸出流
字節流InputStreamOutputStream
字符流ReaderWriter

字節流和字符流不同之處

  • 讀寫單位不同:字節流以字節(8bit)為單位,字符流以字符為單位,根據碼表映射字符,一次可能讀多個字節。
  • 處理對象不同:字節流能處理所有類型的數據(如圖片、視頻、音頻等),而字符流只能處理字符類型的數據。

總結:只要是處理純文本數據,就優先考慮使用字符流。 除此之外都使用字節流

字節流和字符流實現類匯總

二、字節輸入輸出流

一切文件數據(文本、圖片、視頻等)在存儲時,都是以二進制數字的形式保存,都一個一個的字節,那么傳輸時一樣如此。所以,字節流可以傳輸任意文件數據。

1、字節輸入流(InputStream)

InputStream抽象類字節輸入流的所有類的超類,可以讀取字節信息到內存中。它定義了字節輸入流的基本共性功能方法。

1、public abstract int read();
2、 public void close();
3、public long skip(long n);
4、public synchronized void mark(int readlimit);
5、public synchronized void reset();

我們以FileInputStream讀取文件為例

FileInputStream讀取字節數據
test.txt文件內容為:123123123
1、讀取字節:read方法,每次可以讀取一個字節的數據,提升為int類型,讀取到文件末尾,返回-1,代碼如下:

public static void testFileInPut()throws Exception {FileInputStream inputStream = new FileInputStream("D:\\aplus\\test.txt");int b;while ((b = inputStream.read()) != -1) {System.out.println((char)b);}inputStream.close();}

2、使用字節數組讀取:read(byte[] b),每次讀取b的長度個字節到數組中,返回讀取到的有效字節個數,讀取到末尾時,返回-1 ,代碼如下:

public static void testFileInPut1()throws Exception {FileInputStream inputStream = new FileInputStream("D:\\aplus\\test.txt");int b;byte[] bytes = new byte[2];while ((b = inputStream.read(bytes)) != -1) {System.out.println(b);System.out.println("======");System.out.println(new String(bytes));}inputStream.close();}

輸出結果:
12
31
23
12
32
我們發現結果不正確,最后一個為啥事32,這是由于最后一次讀取時,只讀取一個字節3,數組中,上次讀取的數據沒有被完全替換,所以要通過len ,獲取有效的字節。

每次讀取后,把數組的有效字節部分,變成字符串打印
代碼改造如下:

public static void testFileInPut1()throws Exception {FileInputStream inputStream = new FileInputStream("D:\\aplus\\test.txt");int b;byte[] bytes = new byte[2];while ((b = inputStream.read(bytes)) != -1) {//System.out.println(new String(bytes));System.out.println(new String(bytes,0,b));}inputStream.close();}

2、字節輸出流(OutputStream)

.OutputStream抽象類輸出流是所有類的超類(父類),將指定的字節信息寫出到目的地。定義了字節輸出流公共方法。

1、public abstract void write(int b)
2、public void write(byte b[])
3、public void write(byte b[], int off, int len)
4、 public void flush()
5、public void close()

我們以FileOutputStream寫出文件為例
使用FileOutputStream寫出字節數據主要通過Write方法,而write方法分如下三種

public void write(int b) public void write(byte[] b) public void write(byte[] b,int off,int len) //從`off`索引開始,`len`個字節

1、write(int b)每次寫出一個字節數據,代碼如下:

public static void testFileOutPut()throws Exception {FileOutputStream outputStream = new FileOutputStream("D:\\aplus\\out.txt");outputStream.write(98);outputStream.write(99);outputStream.flush();outputStream.close();}

2、寫出字節數組:write(byte[] b),每次可以寫出數組中的數據,代碼如下:

public static void testFileOutPut1()throws Exception {FileOutputStream outputStream = new FileOutputStream("D:\\aplus\\out.txt");byte[] b = "我是java高手".getBytes();outputStream.write(b);outputStream.close();}

3、寫出指定長度字節數組:write(byte[] b, int off, int len) ,每次寫出從off索引開始,len個字節,代碼如下:

public static void testFileOutPut2()throws Exception {FileOutputStream outputStream = new FileOutputStream("D:\\aplus\\out.txt");byte[] b = "java".getBytes();outputStream.write(b,0,2);outputStream.close();}

FileOutputStream實現數據追加續寫
FileOutputStream提供了一個構造函數FileOutputStream(File file, boolean append),當boolean為true時表示追加數據。

public static void testFileOutPut3()throws Exception {FileOutputStream outputStream = new FileOutputStream("D:\\aplus\\out.txt",true);byte[] b = "java".getBytes();outputStream.write(b);outputStream.close();}

3、文件拷貝

上面已經詳細介紹了字節輸入和輸出流,我們現在做一個例子實現圖片的拷貝。
上面的寫法不規范,下面我們寫一個規范的文件拷貝,代碼如下:

public static void filePhotoCopy() {FileInputStream inputStream = null;FileOutputStream outputStream = null;try {inputStream = new FileInputStream("D:\\aplus\\IO流.png");outputStream = new FileOutputStream("D:\\aplus\\IOCopy.png");byte[] b = new byte[1024];int i;while ((i = inputStream.read(b)) != -1) {outputStream.write(b,0,i);outputStream.flush();}System.out.println("拷貝完成");} catch (Exception e) {} finally {if (inputStream != null) {try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if (outputStream != null) {try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}}}

三、處理流和轉換流

處理流和節點流一塊使用,在節點流的基礎上,再套接一層,套接在節點流上的就是處理流。
常用的處理流

  • 緩沖流:BufferedInputStrean 、BufferedOutputStream、 BufferedReader、 BufferedWriter 增加緩沖功能,避免頻繁讀寫硬盤。
  • 轉換流:InputStreamReader 、OutputStreamReader實現字節流和字符流之間的轉換。
  • 數據流: DataInputStream 、DataOutputStream 等-提供將基礎數據類型寫入到文件中,或者讀取出來。

———————————————————————————————————
***由于本人水平有限,難免有不足,懇請各位大佬不吝賜教!

總結

以上是生活随笔為你收集整理的一篇文章教你学会Java基础I/O流的全部內容,希望文章能夠幫你解決所遇到的問題。

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