java I/O流

jopen 10年前發布 | 15K 次閱讀 Java開發 Java

Java I/O流簡介:

為使程序設計簡單明了,Java把程序的輸入\輸出抽象為流(Stream),而其中輸入或輸出的數據稱為數據流.簡單地說:流就是指在計算機與輸入\輸出之間流動的數據序列.序列中的數據可以是二進制數據,也可以是其他符合某種格式規定的特定數據,如字符流等。

按照數據的流動方向:

  輸入流
  輸出流

按照處理數據的類型:

  字節流
  字符流

按照流是否直接與特定的地方相連:

  節點流
  處理流

輸入流與輸出流:

按照數據流相對于處理程序的流動方向來劃分。 
f1.png


ffff.png


d1.png


d2.png


字節流與字符流:

按處理數據的類型,流可以分為字節流與字符流,它們處理信息的基本單位分別是字節(byte)與字符(char)。四個抽象類:

  InputStream 字節輸入流

  OutputStream字節輸出流

  Reader 字符輸入流

  Writer 字符輸出流


InputStream 字節輸入流:

三個基本的讀方法
abstract int read() :讀取一個字節數據,并返回讀到的數據,如果返回-1,表示讀到了輸入流的末尾。
int read(byte[] b) :將數據讀入一個字節數組,同時返回實際讀取的字節數。如果返回-1,表示讀到了輸入流的末尾。
int read(byte[] b, int off, int len) :將數據讀入一個字節數組,同時返回實際讀取的字節數。如果返回-1,表示讀到了輸入流的末尾。off指定在數組b中存放數據的起始偏移位置;len指定讀取的最大字節數。
其它方法
long skip(long n) :在輸入流中跳過n個字節,返回實際跳過的字節數。
int available() :返回在不發生阻塞的情況下,可讀取的字節數。
void close() :關閉輸入流,釋放和這個流相關的系統資源。


OutputStream字節輸出流:

三個基本的寫方法
abstract void write(int b) :往輸出流中寫入一個字節。
void write(byte[] b) :往輸出流中寫入數組b中的所有字節。
void write(byte[] b, int off, int len) :往輸出流中寫入數組b中從偏移量off開始的len個字節的數據。
其它方法
void flush() :刷新輸出流,強制緩沖區中的輸出字節被寫出。
void close() :關閉輸出流,釋放和這個流相關的系統資源。


Reader 字符輸入流:

public int read( ) 讀入的字符轉為int返回
public int read(char b[])
public int read(char b[], int off, int len)
public long skip(long n )
public void mark(int readlimit)
public void reset( )
public boolean markSupport( )
public void close( )


Writer 字符輸出流:

public void write(int b) b的低兩字節寫到輸出流
public void write(char b[])
public void write(char b[], int off, int len)
public void write(String s)
public void write(String s, int off, int len)
public void flush( )
public void close( )


節點流與處理流:

按照流是否直接與特定的地方(如磁盤、內存、設備等)相連,分為節點流與處理流兩類。
節點流(Node Stream):可以從或向一個特定的節點直接讀寫數據,如FileReader。
處理流(Processing Stream):又稱過濾流,是對一個已存在流的連接和封裝,進而實現功能更為強大的數據讀寫功能。如BufferedReader

節點流:從特定的地方讀寫的流類,例如:磁盤或一塊內存區域。
處理流:使用節點流作為輸入或輸出。處理流是使用一個已經存在的輸入流或輸出流連接創建的。
f2.png

處理流的構造方法總是要帶一個其他流對象做參數
BufferedReader in1 = new BufferedReader(new FileReader(file));
BufferedReader in2 = new BufferedReader(new
InputStreamReader(new FileInputStream(file)));

I/O流的鏈接:

Input Stream Chain

f3.png

Output Stream Chain

20140409112433375.png


    import java.io.*;  
    public class IOTestProcess {  

        public static void main(String[] args)   
        {  

          try {  
              FileOutputStream fos=new FileOutputStream("cde.txt");  
              BufferedOutputStream bos=new BufferedOutputStream(fos);  
              DataOutputStream dos=new DataOutputStream(bos);  
              int a=90;  
              boolean b=false;  
              char c='c';  
              double d=48.796;  

              dos.writeInt(a);  
              dos.writeBoolean(b);  
              dos.writeChar(c);  
              dos.writeDouble(d);  
              dos.flush();  
              dos.close();  


              FileInputStream fis=new FileInputStream("cde.txt");  
              DataInputStream dis=new DataInputStream(fis);  

              int e=dis.readInt();  
              boolean g=dis.readBoolean();  
              char f=dis.readChar();   
              double h=dis.readDouble();  
              System.out.println(e);  
              System.out.println(f);  
              System.out.println(g);  
              System.out.println(h);  

        } catch (Exception e) {  
            e.printStackTrace();  
        }  

        }  

    }  

import java.io.*;  
public class IOTestChar {  

    /*public static void main(String[] args) { 
        try { 
            FileReader fr=new FileReader("src\\IOTestChar.java"); 
            char[] cbuf=new char[1024]; 
            int len=fr.read(cbuf); 
            System.out.println(new String(cbuf,0,len)); 
            fr.close(); 
            FileWriter fos=new FileWriter("abc.txt"); 
            fos.write(cbuf, 0, len); 
            fos.close(); 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
    }*/  

    public static void main(String[] args) {  
        try {  
            FileInputStream fis=new FileInputStream("e:\\android\\Earth.bmp");  
            byte[] buf=new byte[fis.available()];  
            int len=fis.read(buf);  
            System.out.println(new String(buf,0,len));  
            fis.close();  
            FileOutputStream fos=new FileOutputStream("1.bmp");  
            fos.write(buf, 0, len);  
            fos.close();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  

}  
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!