欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

聊聊為什么要使用BufferedReader讀取File

 更新時間:2021年12月09日 15:35:31   作者:shirley_zx  
這篇文章主要介紹了為什么要使用BufferedReader讀取File,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

使用BufferedReader讀取File

Java編程思想一書里面有云,為了提高速度,可以用BufferedReader過濾器類,以提供緩沖區(qū)域。但是這個解釋太簡略了,看了這句話仍然不知道為什么要使用它,于是感覺值得研究一下。

其實只用FileReader也能完成讀取文件的任務(wù)。

FileReader有三個用于read的函數(shù)

  • public int read():每次只read一個字符
  • public int read(char cbuf[], int offset, int length):每次read從offset到offset+length-1的字符,然后放進(jìn)cbuf中
  • public int read(char cbuf[]):一次性的read出來所有的字符,直接放入cbuf中

這三個read方法,每次調(diào)用一次就會read一次file,進(jìn)行一次IO。不管是多次read還是一次性的read,都不是很優(yōu)雅的在read文件的方式。多次read必然會產(chǎn)生多次IO,一次性的read如果遇到很大的文件,對內(nèi)存是極不友好的。

于是BufferedReader就顯現(xiàn)出好處來了。BufferedReader使用裝飾器模式,它的IO行為是每次讀進(jìn)來8k的數(shù)據(jù)到緩沖區(qū),如果需要使用數(shù)據(jù)的時候,再直接從緩沖區(qū)里面拿出數(shù)據(jù)來使用。這樣一來,既提高的讀取速度,又節(jié)省了IO的次數(shù),是一種比較優(yōu)雅的讀取文件的方式。

使用BufferedReader讀取File的代碼舉例

            BufferedReader bufferedReader = new BufferedReader(new FileReader("./pom.xml"));
            StringBuilder stringBuilder = new StringBuilder();
            while ((s = bufferedReader.readLine()) != null) {
                stringBuilder.append(s + "\n");
            }
            System.out.println(stringBuilder.toString());

使用BufferedReader循環(huán)讀文件(新手要注意的細(xì)節(jié))

使用BufferedReader(緩存讀取流)可以每次讀取文件的一行。對于文件內(nèi)容如果是按行為單位排列的話,則使用BufferedReader來讀取文件還是比較方便的。

舉例如下

1、BufferedReader讀取一行

在F盤下有個txt文件,文件內(nèi)容為

在這里插入圖片描述

import java.io.*;
public class test {
    public static void main(String[] args)  {
	BufferedReader br = null;
        try {
            br = new BufferedReader(new FileReader("F:\\test.txt"));
            System.out.println(br.readLine());
        } catch (IOException e) {
            e.printStackTrace();
        }
}

結(jié)果為:

哈哈0

2、BufferedReader循環(huán)讀每一行

import java.io.*;
public class test {
    public static void main(String[] args)  {
	BufferedReader br = null;
        try {
            br = new BufferedReader(new FileReader("F:\\test.txt"));
            String text = null;
            //讀取內(nèi)容為null則表示讀到了文件末尾
        	while ((text = br.readLine()) != null) {
            System.out.println(text);
       		 }
        } catch (IOException e) {
            e.printStackTrace();
        }
}

結(jié)果為:

哈哈0
哈哈1
哈哈2
哈哈3
哈哈4
哈哈5
哈哈6
哈哈7
哈哈8
哈哈9

3、注意細(xì)節(jié)

新手如果沒不注意,容易寫成:

import java.io.*;
public class test {
    public static void main(String[] args)  {
	BufferedReader br = null;
        try {
            br = new BufferedReader(new FileReader("F:\\test.txt"));
            String text = null;
            //
        	while (true) {
	            if (br.readLine() == null) {
	                break;
	            }
            System.out.println(br.readLine());
       		 }
        } catch (IOException e) {
            e.printStackTrace();
        }
}

結(jié)果為:

哈哈1
哈哈3
哈哈5
哈哈7
哈哈9

原因

while (true) {
    if (br.readLine() == null) {
        break;
    }
   System.out.println(br.readLine());
 }

因為在while循環(huán)中, if 語句在做判斷時,其實已經(jīng)讀取了一行,而讀取的這行沒有被打印出來,所以就造成了只打印了一部分。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 一文帶你理解@RefreshScope注解實現(xiàn)動態(tài)刷新原理

    一文帶你理解@RefreshScope注解實現(xiàn)動態(tài)刷新原理

    RefeshScope這個注解想必大家都用過,在微服務(wù)配置中心的場景下經(jīng)常出現(xiàn),他可以用來刷新Bean中的屬性配置,那大家對他的實現(xiàn)原理了解嗎,它為什么可以做到動態(tài)刷新呢,所以本文小編將給大家詳細(xì)介紹@RefreshScope注解實現(xiàn)動態(tài)刷新原理
    2023-07-07
  • 解決springboot使用logback日志出現(xiàn)LOG_PATH_IS_UNDEFINED文件夾的問題

    解決springboot使用logback日志出現(xiàn)LOG_PATH_IS_UNDEFINED文件夾的問題

    這篇文章主要介紹了解決springboot使用logback日志出現(xiàn)LOG_PATH_IS_UNDEFINED文件夾的問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java常用面板之JScrollPane滾動面板實例詳解

    Java常用面板之JScrollPane滾動面板實例詳解

    這篇文章主要介紹了Java常用面板JScrollPane的簡單介紹和一個相關(guān)實例,,需要的朋友可以參考下。
    2017-08-08
  • Java Mybatis數(shù)據(jù)源之工廠模式

    Java Mybatis數(shù)據(jù)源之工廠模式

    這篇文章主要介紹了Java Mybatis數(shù)據(jù)源之工廠模式,工廠模式是比較簡單的設(shè)計模式,Mybatis的數(shù)據(jù)源的部分使用了工廠模式,文章詳細(xì)介紹內(nèi)容需要的朋友可以參考一下
    2022-06-06
  • Java實現(xiàn)郵件發(fā)送功能

    Java實現(xiàn)郵件發(fā)送功能

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)郵件發(fā)送功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Java連接MongoDB進(jìn)行增刪改查的操作

    Java連接MongoDB進(jìn)行增刪改查的操作

    這篇文章主要介紹了Java連接MongoDB進(jìn)行增刪改查的操作的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Java通過URL類下載圖片的實例代碼

    Java通過URL類下載圖片的實例代碼

    這篇文章主要介紹了Java通過URL類下載圖片,文中結(jié)合實例代碼補充介紹了java通過url獲取圖片文件的相關(guān)知識,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • Netty與NIO超詳細(xì)講解

    Netty與NIO超詳細(xì)講解

    Netty本質(zhì)上是一個NIO的框架,適用于服務(wù)器通訊相關(guān)的多種應(yīng)用場景。底層是NIO,NIO底層是Java?IO和網(wǎng)絡(luò)IO,再往下是TCP/IP協(xié)議,下面我們跟隨文章來詳細(xì)了解
    2022-08-08
  • java多線程volatile內(nèi)存語義解析

    java多線程volatile內(nèi)存語義解析

    這篇文章主要介紹了java多線程volatile內(nèi)存語義解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • Java垃圾回收jconsole分析

    Java垃圾回收jconsole分析

    這篇文章主要為大家介紹了Java垃圾回收jconsole分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07

最新評論