日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java BufferedReader相關源碼實例分析

瀏覽:35日期:2022-08-21 17:25:54

1、案例代碼

假設b.txt存儲了abcdegfhijk

public static void main(String[] args) throws IOException { //字符緩沖流 BufferedReader bufferedReader=new BufferedReader(new FileReader(new File('H:ioTextb.txt')),8); //存儲讀取的數據 char[] charsRead=new char[5]; //讀取數據 bufferedReader.read(charsRead); //遍歷并輸出charsRead for (char c:charsRead){ System.out.println(c); } }

2、通過源碼(部分)分析案例

a、第一次讀取

public class BufferedReader extends Reader { private Reader in;//字符流 private char cb[];//緩沖區 private int nChars, nextChar;//nChars緩沖區可讀字符數,nextChar下一個字符位置 private static final int INVALIDATED = -2; private static final int UNMARKED = -1; private int markedChar = UNMARKED; private int readAheadLimit = 0; private boolean skipLF = false; private boolean markedSkipLF = false; private static int defaultCharBufferSize = 8192;//緩沖區默認大小 private static int defaultExpectedLineLength = 80; //案例調用的構造方法 public BufferedReader(Reader in, int sz) { //調用父類構造 super(in); //判斷緩沖區大小是否正常 if (sz <= 0) throw new IllegalArgumentException('Buffer size <= 0'); //用戶傳入的字符流 this.in = in; //給緩沖區指定空間大小(案例指定為8) cb = new char[sz]; //緩沖區可讀字符數和下一個字符位置初始化為0 nextChar = nChars = 0; } //讀取數據 public int read(char cbuf[], int off, int len) throws IOException { synchronized (lock) { ensureOpen(); if ((off < 0) || (off > cbuf.length) || (len < 0) ||((off + len) > cbuf.length) || ((off + len) < 0)) {throw new IndexOutOfBoundsException(); } else if (len == 0) {return 0; } //調用read1方法進行讀取(真正讀取數據的方法是read1方法) int n = read1(cbuf, off, len); if (n <= 0) return n; //將之前沒處理完的數據復制到自定以數組charsRead再次調用read1方法讀取 while ((n < len) && in.ready()) {int n1 = read1(cbuf, off + n, len - n);if (n1 <= 0) break;n += n1; } return n; } } //cbuf用戶自定義數組(charsRead),off=0,len=5 private int read1(char[] cbuf, int off, int len) throws IOException { if (nextChar >= nChars) {//第一次讀nextChar、nChars都為0,滿足條件 if (len >= cb.length && markedChar <= UNMARKED && !skipLF) {return in.read(cbuf, off, len); } //刷新緩沖區,先往下找到fill方法源碼分析 fill(); } if (nextChar >= nChars) return -1; if (skipLF) { skipLF = false; if (cb[nextChar] == ’n’) {nextChar++;if (nextChar >= nChars) fill();if (nextChar >= nChars) return -1; } } //執行完fill方法到這里,(len=5,nChars - nextChar=8-0)->n=5 int n = Math.min(len, nChars - nextChar); //將緩沖區cb從nextChar開始復制n=5個字符到自定義數組 System.arraycopy(cb, nextChar, cbuf, off, n); //nextChar=5 nextChar += n; //n=5 return n; } //刷新緩沖區方法 private void fill() throws IOException { int dst; if (markedChar <= UNMARKED) {//markedChar初始值為UNMARKED,滿足條件 /* No mark */ dst = 0;//初始化dst } else { /* Marked */ int delta = nextChar - markedChar; if (delta >= readAheadLimit) {/* Gone past read-ahead limit: Invalidate mark */markedChar = INVALIDATED;readAheadLimit = 0;dst = 0; } else {if (readAheadLimit <= cb.length) { /* Shuffle in the current buffer */ System.arraycopy(cb, markedChar, cb, 0, delta); markedChar = 0; dst = delta;} else { /* Reallocate buffer to accommodate read-ahead limit */ char ncb[] = new char[readAheadLimit]; System.arraycopy(cb, markedChar, ncb, 0, delta); cb = ncb; markedChar = 0; dst = delta;}nextChar = nChars = delta; } }​ int n; do { //dst=0,cb.length - dst=8-0->n=8 n = in.read(cb, dst, cb.length - dst); } while (n == 0); if (n > 0) {//滿足條件 //nChars=8 nChars = dst + n; //nextChar=0 nextChar = dst; } } }

第一次讀取后charsRead存儲了五個字符:abcde

b、第二次讀取

//cbuf用戶自定義數組(charsRead),off=0,len=5 private int read1(char[] cbuf, int off, int len) throws IOException { if (nextChar >= nChars) {//第二次讀nextChar=5、nChars=8,不滿足條件 if (len >= cb.length && markedChar <= UNMARKED && !skipLF) {return in.read(cbuf, off, len); } fill(); } if (nextChar >= nChars) return -1; if (skipLF) { skipLF = false; if (cb[nextChar] == ’n’) {nextChar++;if (nextChar >= nChars) fill();if (nextChar >= nChars) return -1; } } //跳過if直接到這里,len=5,nChars - nextChar=8-5=3->n=3 int n = Math.min(len, nChars - nextChar); //將緩沖區cb從nextChar=5開始復制n=3個字符到自定義數組 System.arraycopy(cb, nextChar, cbuf, off, n); //nextChar=5+3=8 nextChar += n; //n=8 return n; }

第二次讀取只讀了三個字符把charsRead五個字符的前三個覆蓋:fghde

c、第三次讀取

//cbuf用戶自定義數組(charsRead),off=0,len=5 private int read1(char[] cbuf, int off, int len) throws IOException { if (nextChar >= nChars) {//第三次讀nextChar=8、nChars=8,滿足條件 if (len >= cb.length && markedChar <= UNMARKED && !skipLF) {return in.read(cbuf, off, len); } //刷新緩沖區,先往下找到fill方法源碼分析 fill(); } if (nextChar >= nChars) return -1; if (skipLF) { skipLF = false; if (cb[nextChar] == ’n’) {nextChar++;if (nextChar >= nChars) fill();if (nextChar >= nChars) return -1; } } //執行完fill方法到這里,(len=2,nChars - nextChar=8-0)->n=2 int n = Math.min(len, nChars - nextChar); //將緩沖區cb從nextChar=0開始復制n=2個字符到自定義數組 System.arraycopy(cb, nextChar, cbuf, off, n); //nextChar=5+3=8 nextChar += n; //n=8 return n; } //刷新緩沖區方法 private void fill() throws IOException { int dst; if (markedChar <= UNMARKED) {//markedChar初始值為UNMARKED,滿足條件 /* No mark */ dst = 0;//初始化dst } else { /* Marked */ int delta = nextChar - markedChar; if (delta >= readAheadLimit) {/* Gone past read-ahead limit: Invalidate mark */markedChar = INVALIDATED;readAheadLimit = 0;dst = 0; } else {if (readAheadLimit <= cb.length) { /* Shuffle in the current buffer */ System.arraycopy(cb, markedChar, cb, 0, delta); markedChar = 0; dst = delta;} else { /* Reallocate buffer to accommodate read-ahead limit */ char ncb[] = new char[readAheadLimit]; System.arraycopy(cb, markedChar, ncb, 0, delta); cb = ncb; markedChar = 0; dst = delta;}nextChar = nChars = delta; } }​ int n; do { //dst=0,cb.length - dst=8-0->n=8 n = in.read(cb, dst, cb.length - dst); } while (n == 0); if (n > 0) {//滿足條件 //nChars=8 nChars = dst + n; //nextChar=0 nextChar = dst; } } }

第三次讀取了兩個字符到charsRead,把最后兩個字符覆蓋:fghijk

3、源碼執行過程圖解

Java BufferedReader相關源碼實例分析

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美日韩亚洲一区在线观看| 日韩精品亚洲专区| 精品亚洲二区| 麻豆精品99| 欧美a在线观看| 国产精品夜夜夜| | 精品成人免费一区二区在线播放| 国产剧情一区二区在线观看| 正在播放日韩精品| 国产欧美日韩综合一区在线播放| 亚洲在线久久| 91亚洲精品视频在线观看| 国产情侣一区| 精品久久亚洲| 日韩大片在线| 亚洲高清av| 亚洲精选久久| 国产日韩欧美在线播放不卡| 欧美激情视频一区二区三区免费 | 日韩精品dvd| 欧美日韩一区二区三区视频播放| 亚洲欧美日本视频在线观看| 视频一区欧美日韩| 国产欧美亚洲一区| 中文字幕在线官网| 激情欧美丁香| 快she精品国产999| 国产精品一区二区三区www | 久久不卡日韩美女| 最新亚洲激情| 日韩电影免费网站| 日韩av在线免费观看不卡| 91看片一区| 欧美一级二级视频| 国产视频欧美| 91精品福利| 欧美黑人做爰爽爽爽| 婷婷激情一区| 蜜桃久久久久久| 国产日韩精品视频一区二区三区| 九九久久国产| 欧美精品激情| 国产色噜噜噜91在线精品 | 日本成人在线视频网站| 精品精品99| 午夜一区在线| 欧美国产专区| 国产精品普通话对白| 日韩av一区二| 久久久精品午夜少妇| 日韩中文欧美在线| 久久天堂影院| 亚洲综合另类| 精品久久电影| 亚洲三级网站| 午夜av不卡| 日本一区二区三区视频在线看 | 五月激激激综合网色播| 国产精品久久久久久久久久10秀| 免费精品视频| 91av亚洲| 日韩高清不卡一区| 久久麻豆精品| 欧美一区精品| 樱桃视频成人在线观看| 日韩在线短视频| 99久久久久国产精品| 国产超碰精品| 日韩不卡在线| 91精品99| 91精品日本| 久久不卡日韩美女| 免播放器亚洲一区| 91中文字幕精品永久在线| 久久午夜精品一区二区| 黄毛片在线观看| 日韩欧美激情电影| 亚洲成人二区| 大香伊人久久精品一区二区| 日韩精品亚洲专区在线观看| 亚洲国产一区二区在线观看| 国产精品成人a在线观看| 日韩av一二三| 久久亚洲国产精品一区二区| 久久精品国产99久久| 精品久久久久久久| 国产欧美自拍一区| 日韩黄色av| 亚洲视频国产精品| 一本色道精品久久一区二区三区| 日韩欧美一区二区三区在线视频| 7m精品国产导航在线| 蜜桃视频一区二区三区在线观看 | 日本精品在线播放| 丝袜美腿亚洲色图| 婷婷丁香综合| 久久精品青草| av中文资源在线资源免费观看| 国产伦理一区| 日本va欧美va精品发布| 综合亚洲色图| 综合激情视频| 蜜臀久久99精品久久久画质超高清 | 欧美~级网站不卡| 日韩国产欧美一区二区三区| 噜噜噜久久亚洲精品国产品小说| 欧美中文字幕一区二区| 天堂成人免费av电影一区| 99精品国产一区二区三区| av资源中文在线| 国产精品成久久久久| 成人国产精品久久| 国产精品3区| 国产精品久久久亚洲一区| 国产劲爆久久| 欧美a在线观看| 麻豆传媒一区二区三区| 国产精品免费精品自在线观看| 日韩高清中文字幕一区| 日韩高清不卡一区二区| 欧美色综合网| 国产精品日韩精品中文字幕| 国产精品扒开腿做爽爽爽软件| 国产精品综合色区在线观看| 国产乱人伦丫前精品视频| 国产精品日韩精品中文字幕| 欧美黄色一区二区| 精品国产美女a久久9999| 老鸭窝一区二区久久精品| 丁香婷婷久久| 在线看片国产福利你懂的| 久久精品国语| 99国产成+人+综合+亚洲欧美| 国产美女一区| 亚久久调教视频| 7777精品| 精品久久久中文字幕| 神马午夜在线视频| 亚洲精品2区| 日韩精品免费视频一区二区三区 | 国产videos久久| а√天堂8资源在线| 鲁大师成人一区二区三区| 久久gogo国模啪啪裸体| 亚洲一区二区日韩| 国产精品伊人| 欧美极品中文字幕| 免费观看亚洲| 野花国产精品入口| 日韩高清不卡一区| 国产在视频一区二区三区吞精| 韩国久久久久久| 国精品一区二区| 首页国产欧美久久| 国产欧美一区| а√在线中文在线新版| 亚洲网站视频| 综合欧美精品| 久久在线91| 亚洲高清成人| 日本不卡一区二区| 国产伊人久久| 国产一区二区高清| 国产欧美日韩综合一区在线播放| 三上亚洲一区二区| 黄色av一区| 国产欧美欧美| 99久久久久国产精品| 免费不卡在线观看| 九九99久久精品在免费线bt| 欧美日韩国产高清电影| 日韩精品一区二区三区免费视频| 狠狠久久伊人中文字幕| 国产视频一区免费看| 国产亚洲观看| 激情视频一区二区三区| 日本久久二区| 久久伦理在线| 国产精品亚洲成在人线| 99精品视频在线| 日韩av中文字幕一区| 国产精品美女午夜爽爽| 中文字幕日韩高清在线| 亚洲欧美日韩精品一区二区 | 一本色道精品久久一区二区三区| 国产精品一区二区免费福利视频| 久久精品99久久久| 欧美日韩夜夜| 色偷偷色偷偷色偷偷在线视频| 国产精品日韩久久久| 欧美日韩国产高清电影| 国产精品亚洲二区| 国产一区导航| 久久婷婷国产| 99国内精品| 精品日韩在线| 中文字幕一区二区三区日韩精品 | 日韩在线第七页| 日韩激情网站|