緩沖區的建立目的就是增加傳輸性能,使我們傳輸數據更加快速
緩沖區的內部其實很簡單 就是在內部封裝了一個數組 用數組來存儲數據 對外提供一些方法對數組進行訪問
其中這些方法的操作就是對數組的指針(角標)。
緩沖區的原理:從源中獲取一批數據到緩沖區,再從緩沖區中一個一個取出 取完后用-1作為結束標記
在BufferedReader中我們讀取數據方法有read() ,readLine()
read() 其參數為char[],cbuf,int off,int len。其返回值為-1
readLine()方法是一行一行的取 其內部就像是一個字符串容器StringBuffder 其返回值為null;
首先定義一個類 在類中定義兩個讀取數據的方法 MyReader(),MyReadLine();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
public class MyBufferedReader { private FileReader fr; private char[] buff = new char[1024]; private int zz = 0; private int count = 0; MyBufferedReader(FileReader fr){ this.fr = fr; } public int MyRead() throws IOException{ if(count==0){ count = fr.read(buff); zz =0; } if(count<0) return -1; char ch = buff[zz++]; count--; return ch; } public String MyReadLine() throws IOException{ StringBuilder stb = new StringBuilder(); int ch = 0; while((ch=MyRead())!=-1){ if(ch=='\r') continue; if(ch=='\n') return stb.toString(); stb.append((char)ch); } if(stb.length()!=0) return stb.toString(); return null; } public void MyClose() throws IOException{ fr.close(); } } |
里面我定義了指針zz 和一個緩沖區計數器count來記錄緩沖區內讀取數據的變化
當count==0時 就往緩沖區內讀入數據 zz為0 從第一個數開始讀
小于0時數據讀取完畢 返回-1
在MyReadLine()中 創建一個字符串容器StringBuilder 來存儲數據黨stb==\n時 一行讀取完畢其返回值為null;
以上這篇自定義BufferedReader的實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:http://www.cnblogs.com/alex96/archive/2017/12/15/8041720.html