JAVA之IO 基礎(字節流和字符流)

概述

Java的io流,可大致分爲兩類,字節流和字符流
如下圖:
這裏寫圖片描述

字節流(Byte Streams)

所謂字節流,即在java程序採用8位的字節單位實現輸入和輸出,如上圖所示,所有的字節流都繼承自 InputStream(輸入流)和OutputStream(輸出流).

首先看一下官方的小例子:

        FileInputStream in = null;
        FileOutputStream out = null;

        try {
            in = new FileInputStream("xanadu.txt");
            out = new FileOutputStream("outagain.txt");
            int c;

            while ((c = in.read()) != -1) {
                out.write(c);
            }
        } finally {
            if (in != null) {
                in.close();
            }
            if (out != null) {
                out.close();
            }
        }

FileInputStream 爲源(文件)提供了read()方法,取出一定單位(字節)的內容,並將其賦值給一個int變量後,FileOutputStream 再將得到的變量c輸出至新文件中,這就是整個輸入輸出的整個過程,如下圖:
這裏寫圖片描述
切記 在程序完成操作後,一定要記得關閉輸入,輸入流,否則可能產生資源泄露(resource leak)

字符流(Character Streams)

Java 存儲使用unicode 編碼存儲字符,字符流根據系統本地環境使用具體的編碼,當然也可以手動指定編碼,中文系統一般使用utf-8或者gbk
如:

例:

        FileReader inputStream = null;
        FileWriter outputStream = null;

        try {
            inputStream = new FileReader("xanadu.txt");
            outputStream = new FileWriter("characteroutput.txt");

            int c;
            while ((c = inputStream.read()) != -1) {
                outputStream.write(c);
            }
        } finally {
            if (inputStream != null) {
                inputStream.close();
            }
            if (outputStream != null) {
                outputStream.close();
            }
        }

和字節流的操作基本相同,值得注意的是當inputstream執行read()賦值給int變量c的時候,是將獲取的字符傳遞給c的後16位,而字節流獲取的字節傳遞至int變量的後8位。這是由java基本變量類型的長度決定的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章