java输入流读取几行文本_Java基础笔记Day_16
生活随笔
收集整理的這篇文章主要介紹了
java输入流读取几行文本_Java基础笔记Day_16
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
IO流(字節流)
IO流概述及其分類
** InputStream(字節輸入流)和Reader(字符輸入流)通俗的理解都是讀(read)的。** ? ** OutputStream(字節輸出流)和Writer(字符輸出流)通俗的理解都是寫(writer)的。 ** ? * 1.概念> IO流用來處理設備之間的數據傳輸> Java對數據的操作是通過流的方式> Java用于操作流的類都在IO包中> 流按流向分為兩種:輸入流,輸出流。> 流按操作類型分為兩種:> 字節流 : 字節流可以操作任何數據,因為在計算機中任何數據都是以字節的形式存儲的> 字符流 : 字符流只能操作純字符數據,比較方便。 * 2.IO流常用父類> 字節流的抽象父類:>> InputStream >> OutputStream> 字符流的抽象父類:>> Reader >> Writer * 3.IO程序書寫> 使用前,導入IO包中的類> 使用時,進行IO異常處理> 使用后,釋放資源FileInputStream
* read()一次讀取一個字節 * FileInputStream fis = new FileInputStream("aaa.txt"); //創建一個文件輸入流對象,并關聯aaa.txtint b; //定義變量,記錄每次讀到的字節while((b = fis.read()) != -1) { //將每次讀到的字節賦值給b并判斷是否是-1System.out.println(b); //打印每一個字節}fis.close();read()方法返回值為什么是int?
* read()方法讀取的是一個字節,為什么返回是int,而不是byte * > 因為字節輸入流可以操作任意類型的文件,比如圖片音頻等,這些文件底層都是以二進制形式的存儲的,如果每次讀取都返回byte,有可能在讀到中間的時候遇到111111111> 那么這11111111是byte類型的-1,我們的程序是遇到-1就會停止不讀了,后面的數據就讀不到了,所以在讀取的時候用int類型接收,如果11111111會在其前面補上> 24個0湊足4個字節,那么byte類型的-1就變成int類型的255了這樣可以保證整個數據讀完,而結束標記的-1就是int類型文件的讀寫
* 文本文件的讀寫> 用FileInputStream和FileOutputStream讀寫文本文件> 用BufferedReader和BufferedWriter讀寫文本文件 * 二進制文件的讀寫> 使用DataInputStream和DataOutputStream讀寫二進制文件以及基本數據類型數據的讀寫 * 對象的讀寫> 使用ObjectInputStream和ObjectOutputStream讀寫對象(序列化與反序列化)FileOutputStream
* write()一次寫出一個字節 * FileOutputStream fos = new FileOutputStream("bbb.txt"); //如果沒有bbb.txt,會創建出一個//fos.write(97); //雖然寫出的是一個int數,但是在寫出的時候會將前面的24個0去掉,所以寫出的是一個bytefos.write(98);fos.write(99);fos.close(); ** 1、前兩種構造方法在向文件寫數據時將覆蓋文件中原有的內容 ** ** 2、創建FileOutputStream實例時,如果相應的文件并不存在,則會自動創建一個空的文件 如果路徑不存在則拋出找不到文件的異常 **字節數組拷貝之available()方法
* int read(byte[] b):一次讀取一個字節數組 * write(byte[] b):一次寫出一個字節數組 * available()獲取讀的文件所有的字節個數 ** 弊端:有可能會內存溢出 **BufferedInputStream和BufferOutputStream拷貝
* A:緩沖思想> 字節流一次讀寫一個數組的速度明顯比一次讀寫一個字節的速度快很多,> 這是加入了數組這樣的緩沖區效果,java本身在設計的時候,> 也考慮到了這樣的設計思想(裝飾設計模式后面講解),所以提供了字節緩沖區流 * B.BufferedInputStream> BufferedInputStream內置了一個緩沖區(數組)> 從BufferedInputStream中讀取一個字節時> BufferedInputStream會一次性從文件中讀取8192個, 存在緩沖區中, 返回給程序一個> 程序再次讀取時, 就不用找文件了, 直接從緩沖區中獲取> 直到緩沖區中所有的都被使用過, 才重新從文件中讀取8192個 * C.BufferedOutputStream> BufferedOutputStream也內置了一個緩沖區(數組)> 程序向流中寫出字節時, 不會直接寫到文件, 先寫到緩沖區中> 直到緩沖區寫滿, BufferedOutputStream才會把緩沖區中的數據一次性寫到文件里 * D.小數組的讀寫和帶Buffered的讀取哪個更快?> 定義小數組如果是8192個字節大小和Buffered比較的話> 定義小數組會略勝一籌,因為讀和寫操作的是同一個數組> 而Buffered操作的是兩個數組flush和close方法的區別
* flush()方法> 用來刷新緩沖區的,刷新后可以再次寫出 * close()方法> 用來關閉流釋放資源的的,如果是帶緩沖區的流對象的close()方法,不但會關閉流,還會再關閉流之前刷新緩沖區,關閉后不能再寫出BufferedReader類
* 如何提高字符流讀取文本文件的效率?> 使用FileReader類與BufferedReader類,BuffereReader類帶有緩沖區,按行讀取內容的readLine()方法 * 如何提高字符流寫文本文件的效率?> 使用FileWriter類與BufferedWriter類,BufferedWrite類是Write類的子類,BufferedWrite類帶有緩沖區總結
* File 類用于訪問文件或目錄的屬性 * 程序和數據源之間通過流聯系> 輸入流和輸出流> 字節流和字符流> 節點流和包裝流 * FileInputStream和FileOutputStream以字節流的方式讀寫文本文件。 * BufferedReader和BufferedWriter以字符流的方式讀寫文本文件,而且效率更高。 ? * FileInputStream FileOutputStream 字節的輸入輸出流 * FileWriter FileReader 字符的輸入輸出流 * BufferedReader BufferedWriter 帶緩沖區的字符輸入輸出流,可以提高字符輸入輸出的效率 * ObjectInputStream ObjectOutputStream 對象的輸入輸出流,用于將對象直接寫入文件中,直接從文件中讀取對象(操作的對象的類必須實現Serializable) * InputStreamReader OutputStreamWriter總結
以上是生活随笔為你收集整理的java输入流读取几行文本_Java基础笔记Day_16的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决 windows10和ubuntu1
- 下一篇: JavaScript中eval()函数