最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

使用BufferedReader讀取File

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

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

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

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

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

于是BufferedReader就顯現(xiàn)出好處來(lái)了。BufferedReader使用裝飾器模式,它的IO行為是每次讀進(jìn)來(lái)8k的數(shù)據(jù)到緩沖區(qū),如果需要使用數(shù)據(jù)的時(shí)候,再直接從緩沖區(qū)里面拿出數(shù)據(jù)來(lái)使用。這樣一來(lái),既提高的讀取速度,又節(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(緩存讀取流)可以每次讀取文件的一行。對(duì)于文件內(nèi)容如果是按行為單位排列的話,則使用BufferedReader來(lái)讀取文件還是比較方便的。

舉例如下

1、BufferedReader讀取一行

在F盤下有個(gè)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é)

新手如果沒(mé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"));
            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());
 }

因?yàn)樵趙hile循環(huán)中, if 語(yǔ)句在做判斷時(shí),其實(shí)已經(jīng)讀取了一行,而讀取的這行沒(méi)有被打印出來(lái),所以就造成了只打印了一部分。

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

相關(guān)文章

  • Java編程中ArrayList源碼分析

    Java編程中ArrayList源碼分析

    這篇文章主要介紹了Java編程中ArrayList源碼分析,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • SpringBoot使用Editor.md構(gòu)建Markdown富文本編輯器示例

    SpringBoot使用Editor.md構(gòu)建Markdown富文本編輯器示例

    這篇文章主要介紹了SpringBoot使用Editor.md構(gòu)建Markdown富文本編輯器示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • idea前后跳轉(zhuǎn)箭頭的快捷鍵

    idea前后跳轉(zhuǎn)箭頭的快捷鍵

    這篇文章主要介紹了idea前后跳轉(zhuǎn)箭頭的快捷鍵,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • Java?retainAll()方法的超詳細(xì)講解

    Java?retainAll()方法的超詳細(xì)講解

    這篇文章主要介紹了Java?retainAll()方法的相關(guān)資料,retainAll()是Java集合接口中的一個(gè)方法,用于保留集合中與指定集合交集的元素,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03
  • SpringBoot 集成 ShedLock 分布式鎖的示例詳解

    SpringBoot 集成 ShedLock 分布式鎖的示例詳解

    ShedLock是一個(gè)在分布式環(huán)境中使用的定時(shí)任務(wù)框架,用于解決在分布式環(huán)境中的多個(gè)實(shí)例的相同定時(shí)任務(wù)在同一時(shí)間點(diǎn)重復(fù)執(zhí)行的問(wèn)題,本文重點(diǎn)給大家介紹SpringBoot 分布式鎖ShedLock的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2021-08-08
  • Lombok和MapStruct整合詳情

    Lombok和MapStruct整合詳情

    這篇文章主要介紹了Lombok和MapStruct整合詳情,文章基于Java的相關(guān)資料展開(kāi)詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-05-05
  • MyBatis核心源碼深度剖析SQL語(yǔ)句執(zhí)行過(guò)程

    MyBatis核心源碼深度剖析SQL語(yǔ)句執(zhí)行過(guò)程

    這篇文章主要介紹了MyBatis核心源碼深度剖析SQL執(zhí)行過(guò)程,mybatis執(zhí)行SQL的流程都是根據(jù)statement字符串從configuration中獲取對(duì)應(yīng)的mappedStatement,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2022-05-05
  • spring Boot 應(yīng)用通過(guò)Docker 來(lái)實(shí)現(xiàn)構(gòu)建、運(yùn)行、發(fā)布流程

    spring Boot 應(yīng)用通過(guò)Docker 來(lái)實(shí)現(xiàn)構(gòu)建、運(yùn)行、發(fā)布流程

    這篇文章主要介紹了spring Boot 應(yīng)用通過(guò)Docker 來(lái)實(shí)現(xiàn)構(gòu)建、運(yùn)行、發(fā)布流程,圖文詳解,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-11-11
  • java用applet畫圖用到的方法(涉及雙緩沖)

    java用applet畫圖用到的方法(涉及雙緩沖)

    這篇文章主要介紹了java用applet畫圖用到的方法(涉及雙緩沖),然后作為基礎(chǔ)的基礎(chǔ)的基礎(chǔ),必須學(xué)習(xí)如何讓鍵盤與界面進(jìn)行交互。下面就是對(duì)一個(gè)基礎(chǔ)得不能再基礎(chǔ)的applet程序,需要的朋友可以參考下
    2019-06-06
  • Java設(shè)計(jì)模式中的原型模式講解

    Java設(shè)計(jì)模式中的原型模式講解

    原型模式是用于創(chuàng)建重復(fù)的對(duì)象,同時(shí)又能保證性能。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式,今天通過(guò)本文給大家介紹下Java?原型設(shè)計(jì)模式,感興趣的朋友一起看看吧
    2023-04-04

最新評(píng)論

攀枝花市| 临猗县| 青州市| 时尚| 靖宇县| 丽水市| 江陵县| 平潭县| 新建县| 乐昌市| 洪雅县| 高唐县| 江山市| 临洮县| 宜兰县| 莫力| 巧家县| 新建县| 衡山县| 永清县| 安龙县| 平湖市| 根河市| 柳江县| 道真| 莒南县| 石台县| 绥江县| 阿荣旗| 金门县| 临高县| 盐池县| 额尔古纳市| 屏南县| 丰宁| 兰溪市| 青州市| 綦江县| 财经| 汶川县| 桑日县|