InputStream和Reader區別


InputStream,OutputStream  前者為字節輸入流,后者為字節輸出流。
Reader   Writer  前者為字符輸入流,后者為字符輸出流。
四個均為抽象類。
fileInputStream 是InputStream 的實現類  
fileReader 是Reader 的實現類
字節流讀取單位為一個字節,字符流讀取單位為一個字符  所以讀取漢字的時候,如果用字節流就會導致讀出來亂碼。這是最常用的地方  其他基本用法差不多。。

BufferedInputStream是套在某個其他的InputStream外,起着緩存的功能,用來改善里面那個InputStream的性能(如果可能的話),它自己不能脫離里面那個單獨存在。FileInputStream是讀取一個文件來作InputStream。所以你可以把BufferedInputStream套在FileInputStream外,來改善FileInputStream的性能。   

 

FileInputStream與BufferedInputStream區別:

FileInputStream是字節流,BufferedInputStream是字節緩沖流,使用BufferedInputStream讀資源比FileInputStream讀取資源的效率高(BufferedInputStream的read方法會讀取盡可能多的字節),且FileInputStream對象的read方法會出現阻塞;

 

FileInputStream與FileReader區別:

FileInputStream是字節流,FileReader是字符流,用字節流讀取中文的時候,可能會出現亂碼,而用字符流則不會出現亂碼,而且用字符流讀取的速度比字節流要快;

 

ObjectOutputStream與ByteArrayOutputStream的區別:

ObjectOutputStream可以將java對象寫入outputstream流中(序列化),然后進行持久化,此對象必須是實現了java.io.Serializable 接口;

ByteArrayOutputStream是將數據寫入byte數組中;

 

了解“堵塞”的意思吧! 假設一個文件的長度是100個字節,要將之讀取到內存中,再假設您每次只讀取10個字節,那么讀完整個文件是不是讀取10次的呀?
假設老板讓你完成100件事情,老板說,你每天只完成10件就可以了,難道你非得等到第十天才完成第100件事情嗎?有一天您在中午下班前就完成了10件事情,下午您不妨多干一點,那么也許在第9天的時候就完成了100件事情。
同理,BufferedInputStream有可能會讀取比您規定的更多的東西到內存,以減少訪問IO的次數, 總之您要記住一句話,訪問IO的次數越少,性能就越高,原因就在於CPU和內存的速度》》》》遠大於硬盤或其他外部設備的速度。
換一個不太恰當的例子來說,您和您的朋友一起去登山,你朋友太不給力了,走一會兒就要休息,而您呢,您的體力比他要好的多,根本不需要休息,所以每當他休息的時候,您得等着他,您那時候什么也干不了,這就叫堵塞,堵塞就是說您有能力干某事,但是迫於某種原因您什么也干不了,只能干等。所以您朋友休息的次數越少,你們兩個到達山頂所花費的時間就越少。CPU訪問硬盤的次數越少,程序就越快。BufferedInputStream在小型文件中的性能優勢無法體現出來,假設您將以個2G大小的文件從D盤完全復制到E盤,性能之優勢便展露無疑!

import java.io.*;
public class SS {
    public static void main(String[] args) throws Exception {
        File f = new File("d:\\大型數據庫文件.mdf");    
        FileInputStream fis = new FileInputStream(f);
        //如果下面的語句使用BufferedOutputStream來修飾則帶來更好的性能現。
        FileOutputStream fos = new FileOutputStream("e:\\" + f.getName());    
        int length = 0;
        byte[] b = new byte[1024];
        while((length = fis.read(b)) != -1)
        {
            fos.write(b, 0, length);
        }
        fos.close();
        fis.close();
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM