1. 程式人生 > >I/O 輸入輸出流

I/O 輸入輸出流

* java.io.File類用於表示檔案(目錄)
  File類只用於表示檔案(目錄)的資訊(名稱、大小等),不能用於檔案內容的訪問
* RandomAccessFile java提供的對檔案內容的訪問,既可以讀檔案,也可以寫檔案。
  RandomAccessFile支援隨機訪問檔案,可以訪問檔案的任意位置

   (1)java檔案模型: 在硬碟上的檔案是byte byte byte儲存的,是資料的集合  
   (2)開啟檔案: 有兩種模式"rw"(讀寫)  "r"(只讀)
             RandomAccessFile raf = new RandomeAccessFile(file,"rw"); //建立一個對檔案進行讀寫的物件
                                檔案指標,開啟檔案時指標在開頭 pointer = 0;
   (3) 寫方法: raf.write(int)--->只寫一個位元組(後8位),同時指標指向下一個位置,準備再次寫入    
   (4)讀方法: int b = raf.read()--->讀一個位元組   
   (5)檔案讀寫完成以後一定要關閉(Oracle官方說明)
* 序列化與基本型別序列化
    1)將型別int 轉換成4byte或將其他資料型別轉換成byte的過程叫序列化
                 資料---->n byte
    2)反序列化
                  將n個byte 轉換成一個數據的過程
       nbyte ---> 資料
    3)RandomAccessFile提供基本型別的讀寫方法,可以將基本型別資料
                序列化到檔案或者將檔案內容反序列化為資料
                
* IO流(輸入流、輸出流)
  1.位元組流
    1)InputStream、OutputStream
      InputStream 抽象了應用程式 <讀取資料> 的方式 
      OutputStream 抽象了應用程式<寫出資料> 的方式 
    2)EOF = End   讀到-1就讀到結尾
    3)輸入流基本方法
      int  b = in.read();讀取一個位元組無符號填充到int低八位.-1是 EOF
      in.read(byte[] buf) 
      in.read(byte[] buf,int start,int size)
    4)輸出流基本方法
      out.write(int b)  寫出一個byte到流,b的低8位
      out.write(byte[] buf) 將buf位元組陣列都寫入到流
      out.write(byte[] buf,int start,int size) 
    5)FileInputStream--->具體實現了在檔案上讀取資料
    6)FileOutputStream---> 實現了向檔案中寫入byte資料的方法   
    7)DataOutputStream/DataInputStream
               對"流"功能的擴充套件,可以更加方面的讀取int,long,字元等型別資料
        DataOutputStream
        writeInt()/writeDouble()/writeUTF()
    8)BufferedInputStream&BufferedOutputStream
               這兩個流類位IO提供了帶緩衝區的操作,一般開啟檔案進行寫入
               或讀取操作時,都會加上緩衝,這種流模式提高了IO的效能
               從應用程式中把輸入放入檔案,相當於將一缸水倒入到另一個缸中:
       FileOutputStream--->write()方法相當於一滴一滴地把水“轉移”過去
       DataOutputStream-->writeXxx()方法會方便一些,相當於一瓢一瓢把水“轉移”過去
       BufferedOutputStream--->write方法更方便,相當於一飄一瓢先放入桶中,再從桶中倒入到另一個缸中,效能提高了 
  2.字元流
    1) 編碼問題
    2)認識文字和文字檔案
      java的文字(char)是16位無符號整數,是字元的unicode編碼(雙位元組編碼)
                             檔案是byte byte byte ...的資料序列
                             文字檔案是文字(char)序列按照某種編碼方案(utf-8,utf-16be,gbk)序列化為byte的儲存結果
    3)字元流(Reader Writer)---->操作的是文字文字檔案
               字元的處理,一次處理一個字元   ;字元的底層任然是基本的位元組序列               
               字元流的基本實現:
         InputStreamReader   完成byte流解析為char流,按照編碼解析
         OutputStreamWriter  提供char流到byte流,按照編碼處理         
              字元流的檔案讀寫流:
         FileReader
         FileWriter 
              字元流的過濾器:
         BufferedReader   ---->readLine 一次讀一行
         BufferedWriter/PrintWriter   ---->寫一行      
  3.物件的序列化,反序列化
    1)物件序列化,就是將Object轉換成byte序列,反之叫物件的反序列化 
    2)序列化流(ObjectOutputStream)----> writeObject()方法    將Object轉換成byte序列
         反序列化流(ObjectInputStream)----> readObject()方法   將byte序列轉換成Object
    3)序列化介面(Serializable)
               物件必須實現序列化介面 ,才能進行序列化,否則將出現異常
               這個介面,沒有任何方法,只是一個標準 
    4) transient關鍵字
       private void writeObject(java.io.ObjectOutputStream s)
       throws java.io.IOException
  private void readObject(java.io.ObjectInputStream s)
       throws java.io.IOException, ClassNotFoundException       
              分析ArrayList原始碼中序列化和反序列化的問題 
    5)序列化中 子類和父類建構函式的呼叫問題

相關推薦

java之I/O輸入輸出解析

一、流的概述 流是一組有序的資料序列,根據操作的型別,可以分為輸入流和輸出流。I/O流提供了一條通道程式,可以使用這條通道把源中的位元組序列送到目的地。 二、輸入模式 輸出模式圖 三、java流的分類

I/O 輸入輸出

* java.io.File類用於表示檔案(目錄)   File類只用於表示檔案(目錄)的資訊(名稱、大小等),不能用於檔案內容的訪問 * RandomAccessFile java提供的對檔案內容的訪問,既可以讀檔案,也可以寫檔案。   RandomAccessFile支援

JAVA I/O輸入輸出詳解

以Unicode字元為導向的stream,表示以Unicode字元為單位從stream中讀取或往stream中寫入資訊。 區別: Reader和Writer要解決的,最主要的問題就是國際化。原先的I/O類庫只支援8位的位元組流,因此不可能很好地處理16位的Unicode字元流。Unicode是國際化的字符集(

Java中的I/O輸入輸出概述

       流是一組有序的資料序列,根據操作型別,可以分為輸入流和輸出流兩種,Java語言中定義的負責各種輸入輸出的類都被放在java.io包中。其中所有的輸入流類都是抽象類InputStream(位元組輸入流)或抽象類Reader(字元輸入流)的

I/O(輸入/輸出

while 類定義 leo post 字節 lose void 簡單的 ring ---恢復內容開始--- 在變量、數組和對象中儲存的數據是暫時存在的,程序結束後它們就會丟失。為了能夠永久地保存創建的數據,需要將其保存在磁盤文件中,這樣就可以在其他程序中使用它們。Jav

I/O輸入輸出

fileinput 文件 實現 輸入 create 數據 ring NPU file 流概述   一組有序的數據序列,就好比流淌的小溪,只是小溪流淌的是水,而這個流的是數據,是流入還是流出是相對內存而言的,內存可以認為是數據源的聚集地,而文件從外部流向數據源頭即輸入流,

pcl之I/O輸入輸出

res resize height trying char eight eat pcl ++ pcl之I/O輸入輸出 Reading Point Cloud data from PCD files #include <iostream> #include &l

Unix I/O--輸入/輸出(I/O) : 是指主存和外部裝置(如磁碟,終端,網路)之間拷貝資料過程

輸入/輸出(I/O) : 是指主存和外部裝置(如磁碟,終端,網路)之間拷貝資料過程   https://www.bbsmax.com/A/o75N88ZxzW/   10.1 Unix I/O 一個Unix 檔案就是一個m個位元組的序列: 所有

Java I/O (輸入/輸出)

Java I/O (輸入/輸出) I/O(輸入輸出)     使用輸入機制,允許程式讀取外部資料(包括來自磁碟、光碟等儲存裝置的資料)、使用者輸入的資料     使用輸出機制,允許程式記錄執行狀態,將程式資料輸出到磁碟、光碟等儲存裝置中           Java 的

Java輸入輸出I/O

第十四天: 目標: ------------------------------------------------------------ 第十四章  Stream I/O and Files, 共 44 個slide(411-455); 知識點:一. 流的概念    

File I/O 檔案輸入輸出

InputStream:位元組輸入流(抽象類)--》FileInputStream int read(): 從輸入流一個位元組一個位元組的讀,返回的是該位元組的整數表示形式,如果到了輸入流的末尾,返回-1 int read(byte[ ] b): 從輸入流讀取若個位元組,把這

java輸入輸出I/O)總結

 io流的四個基本類       Java.io包中包含了流式I/O所需要的所有類。在java.io包中有四個基本類:InputStream、OutputStream及Reader、Writer類,它們分別處理位元組流和字元流: 基本資料流的I/O 輸入/輸出

輸入輸出--I/O

1)FileReader類介紹: InputStreamReader類的子類,所有方法(read()等)都從父類InputStreamReader中繼承而來; 2)與InputStreamReader類的區別: 構造方法摘要   (1)FileReader (File  file)     在給定從中讀取資料

Java I/O (1) - 輸入/輸出

puts 概念 網絡連接 iter 輸入 stream put 基礎 個人 先說概念: Java API中,可以從其中讀入一個字節序列的對象叫做輸入流,可以向其中寫入一個字節序列的對象叫做輸出流。這些字節序列的來源地 和 目的地 可以文件、網絡連接甚至內存塊。抽象類Inp

Java中的字節輸入和字符輸入輸出

io流 tput filter fileread pip ray int ng- class Java中的字節輸入出流和字符輸入輸出流以下哪個流類屬於面向字符的輸入流( )A BufferedWriter B FileInputStream C ObjectInputSt

ObjectInputStream || ObjectOutputStream 序列化對象輸入輸出Demo 學習

圖形 new 顯示 獲取 || 數組 所有 make 聲明 A:Api 說明: ObjectOutputStream 寫入的基本數據和對象 *(內存 到 硬盤 對象的 存儲!!) ObjectInputStream 對以前使用 ObjectOutputStream 寫入的基

c++中IO輸入輸出總結<二>

操作 clu 文件 blog trunc pub filename binary team 1 文件的打開和關閉 1.1 定義流對象   ifsteam iflie;//文件輸入流對象   ifsteam iflie;//文件輸出流對象   fsteam iflie;//文

io輸入輸出字符字節流

ack bds dhx gae woe sid bvs new dtc %E9%97%AE%E4%B8%80%E4%B8%8B%E4%BA%A7%E5%93%81%E4%B8%8A%E7%BA%BF%E5%A4%9A%E6%B8%A0%E9%81%93%E6%89%93%E

java IO輸入輸出實現文本復制

輸入輸出 bsp ava 技術 輸出流 png nbsp log ima java IO輸入輸出流實現文本復制

C++的輸入輸出

spa har void .get zha fail end cout 輸入輸出 1. cin的參數不匹配時,會返回false。使用clear()成員函數重置錯誤位,sync()成員函數清空輸入流。 1 #include<iostream> 2 int c