1. 程式人生 > ><JAVA>字節流,字符流

<JAVA>字節流,字符流

off 抽象類 數據 put 就會 In 向上轉型 new 數據流

 在程序中所有的數據都是以流的方式進行傳輸或者保存的,程序需要數據的時候需要使用輸入流讀取數據,而當程序需要將一些數據保存起來的時候,就要使用輸出流。

  可以通過下面的輸入輸出流關系圖表示這種方式。

技術分享圖片

字節流:

  字節流主要操作byte類型數據,以byte數組為準,主要操作類是OutputStream類和InputStream類。

其中OutputStream類是一個抽象類,如若要使用此類,首先就必須要通過子類來實例化對象。假設現在要操作的事一個文件,則可以使用FileOutputStream類,通過向上轉型後,可以為OutputStream實例化,在OutputStream類中的主要操作方法如下:

1 public void close() throws IOException  //關閉輸出流
2 public void flush() throws IOException  //刷新緩沖區
3 public void write(byte[] b) throws IOException //將一個byte數組寫入數據流
4 public void write(byte[] b,int off,int len) throws IOException //將一個指定範圍的byte數組寫入數據流
5 public abstract void write(int b) throws IOException //
將一個字節數據寫入數據流

操作時必須接收File類實例,指明要輸出的文件路徑。

InputStream是一個輸入流,也就是用來讀取文件的流,抽象方法read讀取下一個字節,當讀取到文件的末尾時候返回 -1。如果流中沒有數據read就會阻塞直至數據到來或者異常出現或者流關閉。這是一個受查異常,具體的調用者必須處理異常。除了一次讀取一個字節,InputStream中還提供了read(byte[]),讀取多個字節。read(byte[])其實默認調用的還是read(byte b[], int off, int len)方法,表示每讀取一個字節就放在b[off++]中,總共讀取len個字節,但是往往會出現流中字節數小於len,所以返回的是實際讀取到的字節數。

public class Test_InputOrOutput {
    public static void main(String[] args) throws IOException{
            FileInputStream fin = new FileInputStream("hello.txt");
            byte[] buffer = new byte[1024];
            int x = fin.read(buffer,0,buffer.length);
            String str = new String(buffer);
            System.out.println(str);
            System.out.println(x);
            fin.close();
    }
}

以上為讀取方法。

<JAVA>字節流,字符流