Java-JavaSE-IO

來源:互聯網
上載者:User

標籤:取資料   異常處理   soc   相關   流向   abstract   序列   dwr   fileinput   

  • 輸入輸出資料流是相對記憶體來說的
  • * Windows的換行:\r\n
  • * 鍵盤輸入
    • InputStream in = System.in;
      • System.in這個流不需要關閉,不然本次程式無法再次使用此流
  • IO的一些使用規律
    • 轉換流:
      • InputStreamReader:位元組流轉字元流,解碼
      • OutputStreamWriter:字元流轉位元組流,編碼
    • 明確源和目的
      • 源:InputStream Reader(文本)
      • 目的:OutputStream Writer(文本)
    • 明確具體裝置
      • 源:
        • 硬碟:FileInputStream FileReader
        • 鍵盤:System.in
        • 記憶體:數組
        • 網路:Socket流
      • 目的:
        • 硬碟:FileOutputStream FileWriter
        • 控制台:System.out
        • 記憶體:數組
        • 網路:Socket流
  • 位元組流
    • 2個抽象基類:InputStream/OutputStream
    • InputStream
      • 子類
        • BufferedInputStream
        • FileInputStream
          • 方法
            • int available()
              • 返回待操作檔案的大小
    • OutputStream
      • write()方法直接寫到目的地,不用flush(),但是要close()
      • 子類
        • BufferedOutputStream
        • FileOutputStream
          • 子類
            • PrintStream
              • 永不拋IOException
              • print()
                • 提供許多可以列印多種資料類型的方法,會保持資料的表示形式
    • ObjectInputStream\ObjectOutputStream
      • 被操作的對象需要實現Serializable
      • 非瞬態,非待用資料才會被序列化
        • transient修飾,不會被序列化
      • 強烈建議,給需要序列化的類顯示聲明serialVersionUID
    • RandomAccessFile
      • 支援對隨機訪問檔案的讀取和寫入
      • 不會清空原檔案的內容,會在原有內容上進行覆寫
      • 可以多個線程,同時往一個檔案中寫入資料
      • 內部維護了一個byte數組
      • 將位元組輸入資料流和輸出資料流進行了封裝
      • 源和目的只能是檔案
      • 可以擷取指標位置,或者設定指標位置,以便操作任意位置的資料
    • PipedInputStream\PipedOutputStream
      • 結合多線程,某個線程通過PipedInputStream讀取資料,另一個線程通過PipedOutputStream將資料寫出
      • PipedInputStream提供PipedOutputStream需要的資料
    • DataInputStream\DataOutputStream
      • 操作基礎資料型別 (Elementary Data Type)、
    • ByteArrayInputStream\ByteArrayOuputStream
      • 關閉這個流是無效的,此類的方法在關閉後仍可以使用
      • 源和目的都是記憶體
  • 字元流
    • 2個抽象基類:Reader/Writer
    • 其實是位元組流+編碼錶,讀到位元組之後,先查表,再轉成字元
    • Reader
      • 方法
        • int read()
          • read a single character,返回讀到的字元的int表示,沒讀到,返-1
        • int read(char[] c)
          • 將讀到的字元存入c中,返回讀到的字元個數(只要讀到,就返回!),當讀到末尾後,返回-1
          • 簡單應用:
            • while( (length=r.read( c ))!=-1){ System.out.print(new String(c , 0, length);}
      • 子類
        • BufferedReader
          • 構造方法
            • BufferedReader(Reader in)
          • 方法
            • String readLine()
              • 直接讀一行,返回字串,讀完,返回null,而非-1
          • 子類
            • LineNumberReader
              • 同屬於裝飾類
              • 用於需要操作行號的情況
        • InputStreamReader
          • 位元組流向字元流轉換的橋樑
          • 可以指定碼錶
          • 小應用
            • BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
          • 子類
            • FileReader
              • 使用預設的碼錶
    • Writer
      • 方法
        • abstract void close()
          • closes the stream, flushing it first
        • abstract void flush()
        • void write(char[]\int\String x)
      • 子類
        • OutputStreamWriter
          • 字元流通往位元組流的橋樑
          • 可以指定碼錶
          • FileWriter
            • 使用預設的碼錶
            • FilleWriter fw =new FileWriter("filename");
              • //若檔案不存在,就建立,若存在,則覆蓋原檔案
              • 所以最好在寫入之前一步才寫這句話!不然會將原有的檔案覆蓋
            • fw.write("abc");
              • 寫入臨時儲存緩衝區
            • fw.flush();
            • fw.close();
              • //關閉前會自動調用flush()方法
            • 異常處理
              • FileWriter fw= null;
              • try{
              • fw=new FileWriter("xxx.txt");
              • fw.write("a");
              • }catch(IOException e){}
              • finally{
              • if(fw!=null)
              • try{
                • fw.close();
                • catch(IOException e){}
              • }}
        • BufferedWriter
          • 建構函式
            • BufferedWriter(Writer out)
          • method
            • write()
              • 將資料放在緩衝區
            • flush()
              • 將緩衝區中的東西寫入外設
            • close()
              • 緩衝區關閉後,關閉前會先flush(),流也就關了
            • void newLine()
              • 寫入一個與平台相關的分行符號
        • PrintWriter
          • 保證列印資料的表示形式
          • 建構函式的參數
            • 字串路徑
            • File對象
            • 位元組輸出資料流
            • 字元輸出資料流
        • 序列流
          • SequenceInputStream
            • 構造器參數有Enumeration<xx>
              • 所以要建立VectorObject Storage Service多個流,來建立Vector的Enumeration
  • RandomAccessFile
    • 執行個體支援對隨機檔案的讀和寫
    • 內部維護了byte類型的數組,且有指標可以運算元組中的元素
    • 若目的檔案存在則不建立,要寫的話,則將原來的資料覆蓋,若不存在,就建立
    • getFilePointer()
    • seek(1*8)
      • 將指標設定到角標是8的位置,每一個角標儲存1個位元組的資料
      • 讀和寫都是從角標位置開始的
    • writeInt()

Java-JavaSE-IO

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.