JAVA基礎字節流】史上最簡單的字節流操作演示

      網友投稿 914 2025-04-01

      前言:


      其實字符流的底層還是使用的字節流,因為計算機只識別二進制,雖然我們輸出字符流的時候,里面寫的是字符但是最終還是轉換成字節流然后在進行存儲或讀取。并且還使用到了一個中間轉換的類OutputStreamWriter和InputStreamReader,一個是在輸出到本地的時候可以把字符流轉換成字節流輸出,還有一個是在本地讀取字節流的內容,然后轉換成字符流輸出到程序的控制臺或者存儲到指定的容器里。

      概述:

      本篇博客會先從什么是IO流的概念開始介紹,然后才是例子演示。所以前面一部分理論可能會有點枯燥,不過沒有理論的例子是沒有靈魂的。如果沒有理論指導,即使把例子實現了也不會真正的理解什么是IO流?什么是字節流?什么是字符流?所以先從概念開始,然后依次是讀取本地文件和把用戶輸入的內容輸出到指定的硬盤位置。最后會有一個小小的擴展圖片復制(本片博客例子部分只列出了字節流的操作,字符流的詳細操作敬請期待下一篇博客。)

      目錄

      IO流

      概念:

      分類:

      數據的流向分為:輸入流和輸出流。

      數據的類型分為:字節流和字符流。

      IO流圖解流向說明

      讀取

      單個讀取

      數組讀取

      寫出

      單個寫出

      數組寫出

      圖片復制

      IO流

      概念:

      生活中,你肯定經歷過這樣的場景。當你編輯一個文本文件,忘記了 ctrl+s ,可能文件就白白編輯了。當你電腦 上插入一個U盤,可以把一個視頻,拷貝到你的電腦硬盤里。那么數據都是在哪些設備上的呢?鍵盤、內存、硬 盤、外接設備等等。 我們把這種數據的傳輸,可以看做是一種數據的流動,按照流動的方向,以內存為基準,分為 輸入input 和 輸出 output ,即流向內存是輸入流,流出內存的輸出流。 Java中I/O操作主要是指使用 Java.io 包下的內容,進行輸入、輸出操作。輸入也叫做讀取數據,輸出也叫做作寫 出數據。

      分類:

      數據的流向分為:輸入流和輸出流。

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

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

      數據的類型分為:字節流和字符流。

      字節流 :以字節為單位,讀寫數據的流。

      字符流 :以字符為單位,讀寫數據的流。

      IO流圖解流向說明

      讀取

      單個讀取

      package com.itheima.demo02.Reader;

      import java.io.FileInputStream;

      import java.io.IOException;

      /*

      * 使用字節流讀取中文文件

      * 1個中文

      * GBK:占用兩個字節

      * UTF-8:占用三個字節

      * */

      public class Demo01InputStream {

      public static void main(String[] args) throws IOException {

      FileInputStream fis=new FileInputStream("F:\虛擬機共享文件\Stream\康世行.txt");

      int len=0;

      while ((len=fis.read())!=-1){

      System.out.println(len);

      }

      fis.close();

      }

      }

      數組讀取

      package com.itheima.demo02.Reader;

      import java.io.FileNotFoundException;

      import java.io.IOException;

      import java.io.FileInputStream;

      import java.io.IOException;

      /*

      * 2. 使用字節數組讀取: read(byte[] b) ,每次讀取b的長度個字節到數組中,返回讀取到的有效字節個數,讀

      取到末尾時,返回 -1

      * */

      public class Demo02Reader {

      public static void main(String[] args) throws IOException {

      // 使用文件名稱創建流對象.

      FileInputStream fis = new FileInputStream("read.txt"); // 文件中為abcde

      // 定義變量,作為有效個數

      int len ;

      // 定義字節數組,作為裝字節數據的容器

      byte[] b = new byte[2];

      // 循環讀取

      while (( len= fis.read(b))!=‐1) {

      // 每次讀取后,把數組變成字符串打印

      System.out.println(new String(b));

      }

      // 關閉資源

      fis.close();

      }

      }

      寫出

      單個寫出

      package com.itheima.demo01.OutputStream;

      import java.io.*;

      /*

      *java.io.OutputStream此抽象類是表示輸出字節流的所有類的超類

      * public void close() :關閉此輸出流并釋放與此流相關聯的任何系統資源。

      public void flush() :刷新此輸出流并強制任何緩沖的輸出字節被寫出。

      public void write(byte[] b) :將 b.length字節從指定的字節數組寫入此輸出流。

      public void write(byte[] b, int off, int len) :從指定的字節數組寫入 len字節,從偏移量 off開始輸

      出到此輸出流。

      public abstract void write(int b) :將指定的字節輸出流

      * 繼承者 java.io.FileOutputStream 文件字節輸出流

      * 構造方法

      * FileOutputStream(File file)

      創建一個向指定 File 對象表示的文件中寫入數據的文件輸出流。

      FileOutputStream(String name)

      創建一個向具有指定名稱的文件中寫入數據的輸出文件流。

      參數: 寫入數據的目的地

      * File file 目的地是一個文件(對象)

      * String name 目的地是一個文件路徑

      * 作用

      * 1.創建一個FileoutputStream對象

      * 2.會根據構造方法中 傳遞的文件/文件路徑,創建一個空文件

      * 3.會把Fileoutputstream對象指向創建好的文件

      * */

      public class Demo01OutputStream {

      public static void main(String[] args) {

      //使用File對象創建流對象

      File file=new File("F:\虛擬機共享文件\Stream\康世行.txt");

      try {

      //輸出到指定位置

      FileOutputStream fos=new FileOutputStream(file,true);

      //讀取指定文件內容

      FileInputStream finput=new FileInputStream(file);

      //向文件里寫入數據

      fos.write('s');

      finput.close();

      } catch (FileNotFoundException e) {

      e.printStackTrace();

      } catch (IOException e) {

      e.printStackTrace();

      }

      }

      }

      數組寫出

      package com.itheima.demo01.OutputStream;

      import java.io.*;

      /*

      *java.io.OutputStream此抽象類是表示輸出字節流的所有類的超類

      * public void close() :關閉此輸出流并釋放與此流相關聯的任何系統資源。

      public void flush() :刷新此輸出流并強制任何緩沖的輸出字節被寫出。

      public void write(byte[] b) :將 b.length字節從指定的字節數組寫入此輸出流。

      public void write(byte[] b, int off, int len) :從指定的字節數組寫入 len字節,從偏移量 off開始輸

      出到此輸出流。

      public abstract void write(int b) :將指定的字節輸出流

      * 繼承者 java.io.FileOutputStream 文件字節輸出流

      * 構造方法

      * FileOutputStream(File file)

      創建一個向指定 File 對象表示的文件中寫入數據的文件輸出流。

      FileOutputStream(String name)

      創建一個向具有指定名稱的文件中寫入數據的輸出文件流。

      參數: 寫入數據的目的地

      * File file 目的地是一個文件(對象)

      * String name 目的地是一個文件路徑

      * 作用

      * 1.創建一個FileoutputStream對象

      * 2.會根據構造方法中 傳遞的文件/文件路徑,創建一個空文件

      * 3.會把Fileoutputstream對象指向創建好的文件

      * */

      public class Demo01OutputStream {

      public static void main(String[] args) {

      //使用File對象創建流對象

      File file=new File("F:\虛擬機共享文件\Stream\康世行.txt");

      try {

      //輸出到指定位置

      FileOutputStream fos=new FileOutputStream(file,true);

      //讀取指定文件內容

      FileInputStream finput=new FileInputStream(file);

      //使用字節數組

      byte[] b="康世行".getBytes();

      fos.write(b);//寫出數據

      fos.write(';');

      //讀取指定文件內容

      //使用字節數組讀取

      int len;//定義變量,作為有效個數(標記)

      //定義字節數組,作為封裝字節數據的容器

      byte[] b1=new byte[2];

      while ((len=finput.read(b1))!=-1){

      //每次讀取后,把數組變成字符串打印(也可以寫入到指定文件里)

      System.out.println(new String(b1,0,len));

      fos.write(b1);//寫出數據

      }

      //關閉資源

      finput.close();

      fos.close();

      } catch (FileNotFoundException e) {

      e.printStackTrace();

      } catch (IOException e) {

      e.printStackTrace();

      }

      }

      }

      圖片復制

      思路:

      圖片復制挺簡單的,核心思想就是一讀一寫。

      利用FileInputStream類里的read()方法讀取本地指定的文件內容,

      這里讀取的是圖片(也可以是其它的文件)。

      然后把讀取的數據流,使用FileOutputStream類里的write()方法輸出到指定的硬盤位置。

      package com.itheima.demo01.OutputStream;

      import java.io.FileInputStream;

      JAVA基礎【字節流】史上最簡單的字節流操作演示

      import java.io.FileNotFoundException;

      import java.io.FileOutputStream;

      import java.io.IOException;

      /*

      * 練習:圖片復制

      * */

      public class CopyImage {

      public static void main(String[] args) throws IOException {

      //開始時間

      long s=System.currentTimeMillis();

      //1創建流對象

      //指定數據源

      FileInputStream fis=new FileInputStream("F:\\虛擬機共享文件\\Stream\\timg.jfif");

      //指定目的地

      FileOutputStream fos=new FileOutputStream("F:\\虛擬機共享文件\\Stream\\image\\ksh.jpg");

      //2讀寫數據

      //定義有效數據標記

      int len;

      //定義字節數組,用于封裝字節和數據暫存。

      byte[] b=new byte[1024];

      //讀取數據

      while ((len=fis.read(b))!=-1){

      //寫出數據

      fos.write(b,0,len);

      }

      //3釋放資源

      fos.close();

      fis.close();

      long e=System.currentTimeMillis();

      System.out.println("復制用時"+(e-s)+"毫秒");

      }

      }

      Java 數據結構

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:如何做甘特圖(如何做甘特圖可動態調節)
      下一篇:企業在云計算中犯下的5個愚蠢錯誤
      相關文章
      亚洲性无码一区二区三区| 亚洲中文字幕一二三四区苍井空 | 亚洲人成77777在线观看网| 亚洲欧洲精品一区二区三区| 亚洲欧洲国产精品你懂的| 亚洲AV无码1区2区久久| 国产V亚洲V天堂无码久久久| 亚洲成av人片在线观看无码不卡| 国产亚洲精品成人AA片新蒲金 | 亚洲高清在线mv| 亚洲经典在线中文字幕| 亚洲精品免费视频| 亚洲一区精品中文字幕| 久久久久亚洲av无码专区喷水 | 亚洲成av人片一区二区三区| 美国毛片亚洲社区在线观看| 亚洲AV日韩AV一区二区三曲| 风间由美在线亚洲一区| 最新亚洲人成无码网站| 亚洲成a人片在线观看日本麻豆| 亚洲第一页综合图片自拍| 亚洲精品国产日韩无码AV永久免费网 | 亚洲电影国产一区| 91在线亚洲精品专区| 亚洲国产成人综合| 在线aⅴ亚洲中文字幕| 亚洲AV无码资源在线观看| 苍井空亚洲精品AA片在线播放| 无码天堂va亚洲va在线va| 亚洲国产aⅴ综合网| 久久久久一级精品亚洲国产成人综合AV区 | 亚洲国产乱码最新视频| 亚洲大码熟女在线观看| 亚洲国产精品成人久久蜜臀 | MM131亚洲国产美女久久| 亚洲精品国产字幕久久不卡| 亚洲精品综合一二三区在线| 亚洲欧洲日产国码www| 亚洲综合激情五月色一区| 国产青草亚洲香蕉精品久久| 国产亚洲av人片在线观看|