<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 17,  comments - 14,  trackbacks - 0

    流的作用:如何從能夠發送字節序列的任何數據源取得輸入,以及如何將輸出發送到能夠接收字節序列的任何目的地。即:輸入/輸出問題。

    字節序列的源和目的地可以是文件、網絡連接、內存塊等,存儲在文件中的信息和從網絡連接中接收的信息,從本質上處理方法是相同的。

    數據最終都保存為一個字節序列,但是在程序設計中應當用更高級的數據結構來處理,如字符或對象序列等。

    java.io 包中定義了多個流類型(類或抽象類)來實現輸入/輸出功能;

    可以從不同的角度對其進行分類:

    按數據 流的方向 不同可以分為 輸入流輸出流。(以程序的角度來考慮)

    按處理數據 單位 不同可以分為 字節流字符流

    按照 功能 不同可以分為 節點流處理流

    J2SDK 所提供的所有流類型位于包java.io內都分別繼承自以下四種抽象流類型。

    image

    節點流和處理流:

    節點流為可以從一個特定的數據源(節點)讀寫數據(如:文件,內存)

    image

    處理流是“連接”在已存在的流(節點流或處理流)之上,通過對數據的處理為程序提供更為強大的讀寫功能。

    image

    InputStream

    繼承自InputSteam的流都是用于向程序中輸入數據,且數據的單位為字節(8 bit);下圖中深色為節點流,淺色為處理流。

    image

    InputStream的基本方法

    讀取一個字節并以整數的形式返回(0~255),
    如果返回-1已到輸入流的末尾。
    int read() throws IOException

    讀取一系列字節并存儲到一個數組buffer,
    返回實際讀取的字節數,如果讀取前已到輸入流的末尾返回-1
    int read(byte[] buffer) throws IOException

    讀取length個字節并存儲到一個字節數組buffer,從off位置開始存,最多len
    返回實際讀取的字節數,如果讀取前以到輸入流的末尾返回-1
    int read(byte[] buffer, int off, int len)
                          throws IOException

    關閉流釋放內存資源
    void close() throws IOException

     

    OutputStream

    繼承自OutputSteam的流是用于程序中輸入數據,且數據的單位為字節(8 bit);下圖中深色為節點流,淺色為處理流。

    image

    OutputStream的基本方法

    向輸出流中寫入一個字節數據,該字節數據為參數b的低8位
    void write(int b) throws IOException

    將一個字節類型的數組中的數據寫入輸出流
    void write(byte[] b) throws IOException

    將一個字節類型的數組中的從指定位置(off)開始的len個字節寫入到輸出流
    void write(byte[] b, int off, int len)
                          throws IOException
    關閉流釋放內存資源
    void close() throws IOException

    將輸出流中緩沖的數據全部寫出到目的地
    void flush() throws IOException

     

    Reader

    繼承自Reader的流都是用于向程序中輸入數據,且數據的單位為字符(16 bit);下圖中深色為節點流,淺色的為處理流。

    image

    Reader 的基本方法

    讀取一個字符并以整數的形式返回(0~255),如果返回-1已到輸入流的末尾。
    int read() throws IOException

    讀取一系列字符并存儲到一個數組buffer,返回實際讀取的字符數,如果讀取前已到輸入流的末尾返回-1
    int read(char[] cbuf) throws IOException

    讀取length個字符并存儲到一個數組buffer,從off位置開始存,最多讀取len返回實際讀取的字符數,如果讀取前以到輸入流的末尾返回-1
    int read(char[] cbuf, int off, int len)
                          throws IOException
    關閉流釋放內存資源
    void close() throws IOException

     

    Writer

    繼承自Writer的流都是用于程序中輸入數據,且數據的單位為字符(16 bit);下圖中深色為節點流,淺色為處理流。

    image

    Writer 的基本方法

    向輸出流中寫入一個字符數據,該字節數據為參數b的低16位
    void write(int c) throws IOException

    將一個字符類型的數組中的數據寫入輸出流,
    void write(char[] cbuf) throws IOException

    將一個字符類型的數組中的從指定位置(offset)開始的length個字符寫入到輸出流
    void write(char[] cbuf, int offset, int length)
                          throws IOException

    將一個字符串中的字符寫入到輸出流
    void write(String string) throws IOException

    將一個字符串從offset開始的length個字符寫入到輸出流
    void write(String string, int offset, int length)
                          throws IOException

    關閉流釋放內存資源
    void close() throws IOException

    將輸出流中緩沖的數據全部寫出到目的地
    void flush() throws IOException

     

    節點流類型

    image

    訪問文件

    FileInputStream和FileOutputStream分別繼承自InputStream和OutputStream用于向文件中輸入和輸出字節。

    FileInputStream和FileOutputStream的常用構造方法:

    FileInputStream(String name) throws FileNotFoundException

    FileInputStream(File file)   throws FileNotFoundException

    FileOutputStream(String name)throws FileNotFoundException

    FileOutputStream(File file)  throws FileNotFoundException

    FileOutputStream(File file, boolean append)
                    throws FileNotFoundException

    FileInputSteam 和 FileOutputStream 類支持其父類InputStream 和OutputStream 所提供的數據讀寫方法。

    注意:

    在實例化FileInputStream和FileOutputSteam流時要用try-catch語句以處理其可能拋出的FileNotFoundException。

    在讀寫數據時也要用try-catch語句以處理可能拋出的 IOException。

    FileNotFoundException是IOException的子類

    FileReader 和 FileWriter 分別繼承自Reader和Writer,FileInputSteam與FileOutputStream類似,所不同的是

    FileReader和FileWriter向文件輸入和輸出的數據單位為字符。

    FileReader和FileWriter的常用構造方法:

    public FileWriter(File file) throws IOException
    public FileWriter(File file, boolean append)
                            throws IOException
    public FileWriter(String fileName)throws IOException
    public FileWriter(String fileName,boolean append)
                            throws IOException
    public FileReader(String fileName)
                            throws FileNotFoundException
    public FileReader(File file)
                            throws FileNotFoundException

     

    處理流類型

    image

    緩沖流

    緩沖流要“套接”在相應的節點流之上,對讀寫的數據提供了緩沖的功能,提高了讀寫的效率,同時增加了一些新的方法。
    J2SDK提供了四種緩存流,其常用的構造方法為:

    BufferedReader(Reader in)
    BufferedReader(Reader in,int sz) //sz 為自定義緩存區的大小
    BufferedWriter(Writer out)
    BufferedWriter(Writer out,int sz)
    BufferedInputStream(InputStream in)
    BufferedInputStream(InputStream in,int size)
    BufferedOutputStream(OutputStream out)
    BufferedOutputStream(OutputStream out,int size)

    BufferedReader提供了readLine方法用于讀取一行字符串(以\r或\n分隔)。
    BufferedWriter提供了newLine用于寫入一個行分隔符。
    對于輸出的緩沖流,寫出的數據會先在內存中緩存,使用flush方法將會使內存中的數據立刻寫出。

     

    轉換流

    InputStreamReader和OutputStreamWriter用與字節數據到字符數據之間的轉換。

    InputStreamReader 需要和 InputStream “套接” 。
    OutpStreamWriter 需要和 OutputStream “套接” 。

    轉換流在構造時可以指定其編碼集合,例如:

    InputStream isr = new InputStreamReader
                             (System.in, “ISO8859_1”)

    數據流&ByteArrayInputStream&ByteArrayOutputStream

    DataInputStream 和 DataOutputStream 分別繼承自InputSteam 和 OutputStream,它屬于處理流,需要分別“套接”在InputStream 和OutputStream類型的節點流上。
    DataInputStream和DataOutputStream提供了可以存取與機器無關的Java原始類型數據(如:int,double 等)的方法。
    DataInputStream和DataOutputStream的構造方法為:
    DataInputStream ( InputStream in )
    DataOutputStream ( OutputStream out )

    Print 流

    PrintWriter和PrintStream 都屬于輸出流,分別針對與字符和字節。
    PrintWriter和PrintStream提供了重載的print
       Println方法用于多種數據類型的輸出。
    PrintWriter和PrintStream的輸出操作不會拋出異常,用戶通過檢測錯誤狀態獲取錯誤信息。
    PrintWriter和PrintStream有自動flush功能。

    PrintWriter(Writer out)
    PrintWriter(Writer out,boolean autoFlush)
    PrintWriter(OutputStream out)
    PrintWriter(OutputStream out,boolean autoFlush)
    PrintStream(OutputStream out)
    PrintStream(OutputStream out,booleanautoFlush)

    Object流

    直接將Object寫入或讀出
    transient關鍵字
    serializable接口
    Externalizable 接口
    void writeExternal(ObjectOutput out) throws IOException
    void readExternal(ObjectInput in) throws IOException, ClassNotFoundException

    總結

    InputStream/OutputStream //最基礎的抽象類,字節流
    Reader/Writer  //最基礎的抽象類 ,字符流
    FileInputStream / FileOutputStream //File打頭的用來操作文件,字節流
    FileReader / FileWriter //File打頭的用來操作文件,字符流
    BufferedInputStream / BufferedOutputStream //帶緩沖的,字節流
    BufferedReader / BufferedWriter //帶緩沖的,字符流
    ByteArrayInputStream / ByteArrayOutputStream  //讀寫內存中的字符數組
    InputStreamReader / OutputStreamWriter //字節轉字符,轉化流
    DataInputStream / DataOutputStream //讀寫基本數據類型
    PrintStream / PrintWriter //都是輸出流,不拋出異常,自動flush
    ObjectInputStream / ObjectOutputStream //讀寫Object
    Serializable接口?標記性接口
    Externalizable ?自己控制序列化
    Transient?

    posted on 2010-11-05 18:02 Mineralwasser 閱讀(1152) 評論(1)  編輯  收藏

    FeedBack:
    # re: JAVA流技術(IO編程)
    2016-06-07 16:11 | re: JAVA流技術(IO編程)
    re: JAVA流技術(IO編程)  回復  更多評論
      

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    <2016年6月>
    2930311234
    567891011
    12131415161718
    19202122232425
    262728293012
    3456789

    常用鏈接

    留言簿(1)

    文章檔案(21)

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲欧洲日产韩国在线| 亚洲国产成人精品无码久久久久久综合 | 国产午夜精品理论片免费观看 | 女性无套免费网站在线看| 亚洲另类春色校园小说| 性xxxxx免费视频播放| 久久综合亚洲色一区二区三区 | 日本高清免费中文在线看| 亚洲 综合 国产 欧洲 丝袜| 日本一区二区在线免费观看| 亚洲熟女乱综合一区二区| yellow免费网站| 亚洲国产第一站精品蜜芽| 无码国产精品一区二区免费16 | 国产精品亚洲美女久久久| 国产黄在线观看免费观看不卡| 在线观看午夜亚洲一区| 青青青国产手机频在线免费观看| 亚洲网站在线播放| 日韩毛片无码永久免费看| 极品美女一级毛片免费| 亚洲国产婷婷六月丁香| 成人免费视频网站www| 亚洲精品无码少妇30P| 亚洲人成影院在线观看| 特级无码毛片免费视频尤物| 亚洲精品人成网在线播放影院| 免费v片在线观看品善网| 成在人线av无码免费高潮喷水| 97亚洲熟妇自偷自拍另类图片| 久久久久国色AV免费看图片| 黄页视频在线观看免费| 亚洲av午夜福利精品一区人妖| 国产精品免费网站| 一区二区免费在线观看| 久久久无码精品亚洲日韩蜜臀浪潮 | 久久精品免费电影| 亚洲精品久久无码av片俺去也 | 无忧传媒视频免费观看入口| 亚洲AV福利天堂一区二区三| 好爽…又高潮了免费毛片|