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

歡迎訪問 生活随笔!

生活随笔

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

java

Java必须了解的“递归”与“IO流”!!!

發布時間:2025/6/16 java 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java必须了解的“递归”与“IO流”!!! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

>>>First:

    遞歸!

 1. 定義: 在函數自身內部,調用函數本身的方式,稱為遞歸。

 2. 注意: 遞歸包括遞進去、歸出來兩步。

     首先,依次執行【函數調自身語句】上半部分的代碼,直到最里層;{?遞進去?}

       ?然后,再從最里層開始,依次執行【函數調自身語句】下半部分的代碼。{?歸出來?}

 3. 下面用示意圖來分析一下:  

    

   !!!遞歸必須通過合適的語句,及時的跳出,否則容易造成死循環。

 4. 用一個例子幫助你理解遞歸的用法:

        用遞歸實現一個數的階乘

  首先,定義一個jiecheng類:

  方法一:

  方法二:?

  其次,在main方法中輸出:

      

  運行驗證:以5的階乘為例輸出結果

      

 

以上便是關于遞歸的基礎知識,So easy,看到這想必就已經學會了!再來看一下今天下一個主角:

?

>>>Second:

    IO流

 1、I/O流分類:

    根據流的方向:輸入流和輸出流

    根據讀取文字的大小:字節流和字符流

             (字節流按字節讀取,讀取中文時容易亂碼;字符流按照字符讀取,通常用于讀取中文)

    根據讀取的方式:節點流和緩存流

 2、讀取文件內容:(3種方法 ↓↓↓)

    FileInputStream fis = new FileInputStream("F:/test.txt");

    StringBuffer sb = new StringBuffer();

  ① 按照字節,一個一個字節讀取文件

?    

  ② 將byte數組直接聲明為輸入流的長度,一次性讀出所有文字

?    

  ③ 一次性讀取1024個字節

?    

?

 3、寫入新文件:

     // FileOutputStream fos = new FileOutputStream("F:/out.txt",true);

    如果第二個參數省略,或傳入false,則表示每次寫入時將原文件清空,從文件頭部開始寫入;

    如果第二個參數傳入true,則表示不清空原文件,在文件末尾處添加新內容。

    FileOutputStream fos = new FileOutputStream("F:/out.txt");

   首先,讀取文件內容(見上),然后寫入:↓↓↓

?    

?

 4、捕獲異常

  (有關異常的內容還有很多,在這就先不詳解了)

  讀寫文件時,易出現異常,故,需要在讀寫過程中進行異常處理,例如捕獲異常

    try{
      FileInputStream fis = new FileInputStream("F:/test.txt");

      FileOutputStream fos = new FileOutputStream("F:/out.txt");

      StringBuffer sb = new StringBuffer();

      // 讀取文件

      int n = -1;
      while((n=fis.read()) != -1){
        sb.append((char)n);
      }
      System.out.println(sb);

      sb.reverse();

      fos.write(sb.toString().getBytes());
      System.out.println(sb);
    } catch(FileNotFoundException e){
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

 5、BufferedInputStream / BufferedOutputStream

  ① 作用:在基本流的基礎上進行包裝,讀取或者寫入文件時,將通過緩存進行。
    即,先將內容寫入到緩存區,緩存區滿以后,再進行讀取或者寫入操作。
    可以大大減少文件的操作次數,提高寫入效率。
  ② 緩存流的使用
    在基本流的基礎之上,進行包裝:
      new BufferedInputStream(new FileInputStream("F:/test.txt"));
    這種寫法。我們稱之為IO鏈,IO關閉時,只需要關閉最外層流,內層流將自動關閉。
  ③ BufferedOutputStream在關閉前,通常調用bos.flush();
    表示關閉前將緩存進行刷新,將緩存區剩余未滿的內容寫入文件。
    但是,一般.close()方法,自帶刷新功能。

  ④ 代碼示例:

?

 6、DateInputStream / DateOutputStream

   采用二進制對文件進行讀寫操作。

   與基本流相比,可以直接讀寫java中的基本數據類型。

   另外,如果操作的文件是一個二進制文件,需要使用DataOutputStream替代FileOutputStream。

   同樣,Date系列的流,也有read和write方法,操作與基本相同。

   注意:只用DataOutputStream寫入文件為二進制文件,只能使用DataInputStream進行讀取。

      String name = "zhangsan";

      int age = 12;

      double height = 178.5;

      String ads = "山東煙臺";

      DataOutputStream dos = null;

      DataInputStream dis = null;

      try {

        dos = new DataOutputStream(new FileOutputStream("F:\\zhangsan.txt"));

        dos.writeUTF(name); dos.writeInt(age);

        dos.writeDouble(height);

        dos.writeUTF(ads);

        dis = new DataInputStream(new FileInputStream("F:\\zhangsan.txt"));

        String uname = dis.readUTF();

        int uage = dis.readInt();

        double uheight = dis.readDouble();

        String uads = dis.readUTF();

        System.out.println(uname+"---"+uage+"---"+uheight+"---"+uads);

      } catch(FileNotFoundException e){

        e.printStackTrace();

      }catch (IOException e) {

        // TODO: handle exception

        e.printStackTrace();

      } finally{

        try {

          dis.close();

          dos.flush();

          dos.close();

        } catch (IOException e) {

          // TODO: handle exception

          e.printStackTrace();

        }

      }

  

?

 7、ObjectOutputStream / ObjectInputStream

   直接繼承自:java.io.OutputStream 抽象類

  ① 與基本流相同,可以使用read、write方法進行讀寫。

  ② 與DateInputStream相同,可以對Java基本數據類型進行直接讀寫:readInt() writeDouble()

  ③ 可以只用readObject()和writeObject() 直接對對象進行操作。

?

  【對象的序列化和反序列】

  ① 對象的序列化:將程序中的對象,持久化的保存在文件中的過程;ObjectOutputStream

  ② 對象的反序列化:將文件中保存的對象,重新讀取到程序中的過程。ObjectInputStream

   

   

?

   如果,要將對象進行序列化操作,那么實體類必須實現可序化接口。

    class Person implements Serializable{}

  ③ 注意:當一個實體類,實現可序化接口后,可以添加一個序列化版本號ID。

  (實現序列化接口以后,根據警告提示,選擇:Add default serial version ID。)

    添加以后,可以用ID表示序列化和反序列化時操作的對象,是同一個對象。

   會自動生成一個靜態屬性:

    private static final long serialVersionUID = 1L;

   如果不添加版本ID,給序列化一個對象后,如果實體類對象有增刪,再進行反序列化時,會造成錯誤。

   因為系統認為這已經不是一個類。

    

    +get、set方法,并重寫toString方法。

?

?

?

轉載于:https://www.cnblogs.com/zyp777/p/8906143.html

總結

以上是生活随笔為你收集整理的Java必须了解的“递归”与“IO流”!!!的全部內容,希望文章能夠幫你解決所遇到的問題。

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