免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
bufferedReader中的readLine()源碼解析

String readLine(boolean ignoreLF) throws IOException {

//行(hang)數(shù)據(jù)的緩沖s

StringBuffer s = null;

int startChar;

        synchronized (lock) {

       /*確保被bufferedReader包裝的輸入流沒有關(guān)閉*/

            ensureOpen();

          /* 如果 讀到'\r',skipLF置為true,

           * 這是skip()方法里面的部分代碼,它展示了通過skipLF來忽略'\n'

           * if (skipLF) {

        skipLF = false;

        if (cb[nextChar] == '\n') {

    nextChar++;

          }

       }

           *ignoreLF一直就是false

           **/

    boolean omitLF = ignoreLF || skipLF;

/* bufferLoop主要是不斷地遍歷底層的數(shù)組cb,并取兩個(gè)換行符之間的數(shù)據(jù)付給行緩沖s。當(dāng)?shù)讓訑?shù)組遍歷完要用fill()把數(shù)據(jù)從流中填充到cb,直到流的末尾

  *charloop,主要是遍歷緩沖數(shù)組cb,以確定'\n','\r'的位置

    nextChar:下次讀取緩沖字符數(shù)組cb的位置,

  nChars:緩沖字符數(shù)組cb的length

  */

    bufferLoop:

    for (;;) {

    //1、如果緩沖數(shù)組的數(shù)據(jù)不足,或者已經(jīng)讀到了數(shù)組的末尾時(shí):

    //1.1如果下次讀取的位置已經(jīng)到了or超過數(shù)組的長(zhǎng)度,從流中讀數(shù)據(jù)到緩沖數(shù)組cb中

if (nextChar >= nChars)

    fill();

/*1.2如果從流中讀數(shù)據(jù)到數(shù)組cb之后, nextChar,nChars的大小關(guān)系沒有改變.

說明到了文件的末尾,END OF FILE.返回s

*/

if (nextChar >= nChars) { /* EOF */

    if (s != null && s.length() > 0)

return s.toString();

    else

return null;

}

//2 緩沖數(shù)組中有足夠的數(shù)據(jù)時(shí):

/*從本個(gè)換行符所在的索引位置開始,遍歷char [] cb ,直到找到\n \r,把兩個(gè)換行符之間的字符序列填充進(jìn)s

*eol:END OF LINE

*類屬性char [] cb ,也就是bufferReader類的緩沖數(shù)組。length由構(gòu)造器指定,若不指定默認(rèn)為8 * 1024 = 8192,與內(nèi)存頁大小密切相關(guān)

* */

boolean eol = false;

char c = 0;

int i;

if (omitLF && (cb[nextChar] == '\n')) 

                    nextChar++;

skipLF = false;

omitLF = false;

    charLoop:

for (i = nextChar; i < nChars; i++) {

    c = cb[i];

    if ((c == '\n') || (c == '\r')) {

eol = true;

break charLoop;

    }

}

/*2.1找到換行符后,從上個(gè)換行符到本換行符之間的序列,填充給s*/

startChar = nextChar;

nextChar = i;

if (eol) {

    String str;

    /*2.1.1如果是第一次遍歷到換行符,*/

    if (s == null)

    {

str = new String(cb, startChar, i - startChar);

    } 

    /*2.1.2至少遍歷到一次換行符時(shí)*/

    else

    {

s.append(cb, startChar, i - startChar);

str = s.toString();

    }

  //更新下次讀取的位置

    nextChar++;

    if (c == '\r') {

skipLF = true;

    }

    return str;

}

//2.2如果沒有換行符

if (s == null) 

//類屬性int defaultExpectedLineLength = 80

    s = new StringBuffer(defaultExpectedLineLength);

//填充s,從上個(gè)換行符到最后

s.append(cb, startChar, i - startChar);

    }

        }

    }



轉(zhuǎn)自:https://blog.csdn.net/LVGAOYANH/article/details/53485758 

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
JAVA的IO輸入輸出流操作手冊(cè)-3
大數(shù)據(jù)學(xué)習(xí)路線分享IO流學(xué)習(xí)筆記
第二十二天 IO-高效流(緩沖流)&轉(zhuǎn)換流【悟空教程】
java socket 實(shí)現(xiàn)服務(wù)端與客戶端
快速找出符合條件的兩個(gè)數(shù) (提高查找效率)
C語言作業(yè)(6)打印數(shù)字圈
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服