自定義BufferedReader的實(shí)例
緩沖區(qū)的建立目的就是增加傳輸性能,使我們傳輸數(shù)據(jù)更加快速
緩沖區(qū)的內(nèi)部其實(shí)很簡(jiǎn)單 就是在內(nèi)部封裝了一個(gè)數(shù)組 用數(shù)組來(lái)存儲(chǔ)數(shù)據(jù) 對(duì)外提供一些方法對(duì)數(shù)組進(jìn)行訪問(wèn)
其中這些方法的操作就是對(duì)數(shù)組的指針(角標(biāo))。
緩沖區(qū)的原理:從源中獲取一批數(shù)據(jù)到緩沖區(qū),再?gòu)木彌_區(qū)中一個(gè)一個(gè)取出 取完后用-1作為結(jié)束標(biāo)記
在BufferedReader中我們讀取數(shù)據(jù)方法有read() ,readLine()
read() 其參數(shù)為char[],cbuf,int off,int len。其返回值為-1
readLine()方法是一行一行的取 其內(nèi)部就像是一個(gè)字符串容器StringBuffder 其返回值為null;
首先定義一個(gè)類 在類中定義兩個(gè)讀取數(shù)據(jù)的方法 MyReader(),MyReadLine();
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 和一個(gè)緩沖區(qū)計(jì)數(shù)器count來(lái)記錄緩沖區(qū)內(nèi)讀取數(shù)據(jù)的變化
當(dāng)count==0時(shí) 就往緩沖區(qū)內(nèi)讀入數(shù)據(jù) zz為0 從第一個(gè)數(shù)開(kāi)始讀
小于0時(shí)數(shù)據(jù)讀取完畢 返回-1
在MyReadLine()中 創(chuàng)建一個(gè)字符串容器StringBuilder 來(lái)存儲(chǔ)數(shù)據(jù)黨stb==\n時(shí) 一行讀取完畢其返回值為null;
以上這篇自定義BufferedReader的實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java開(kāi)發(fā)分布式服務(wù)框架Dubbo服務(wù)引用過(guò)程詳解
這篇文章主要為大家介紹了java開(kāi)發(fā)分布式服務(wù)框架Dubbo服務(wù)引用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11
springboot集成nacos報(bào)錯(cuò):get data from Nacos
這篇文章給大家介紹了springboot集成nacos報(bào)錯(cuò):get data from Nacos error,dataId:null.yaml的原因及解決方法,如果又遇到相同問(wèn)題的朋友可以參考閱讀本文2023-10-10
spring kafka框架中@KafkaListener 注解解讀和使用案例
Kafka 目前主要作為一個(gè)分布式的發(fā)布訂閱式的消息系統(tǒng)使用,也是目前最流行的消息隊(duì)列系統(tǒng)之一,這篇文章主要介紹了kafka @KafkaListener 注解解讀,需要的朋友可以參考下2023-02-02
利用Java實(shí)現(xiàn)mTLS調(diào)用
這篇文章主要介紹使用 Java作為客戶端 與受 mTLS 保護(hù)的服務(wù)交互。為了對(duì)我們的 Java 客戶端進(jìn)行 ssl 配置,我們需要先設(shè)置一個(gè) SSLContext。這簡(jiǎn)化了事情,因?yàn)?SSLContext 可用于各種 http 客戶端,接下來(lái)我們一起進(jìn)入下面文章了解具體內(nèi)容,需要的朋友可以參考一下2021-11-11
Java mockito單元測(cè)試實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了Java mockito單元測(cè)試實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
一文帶你了解Java選擇排序的原理與實(shí)現(xiàn)
選擇排序:(Selection sort)是一種簡(jiǎn)單直觀的排序算法,也是一種不穩(wěn)定的排序方法。本文主要為大家介紹一下選擇排序的原理與實(shí)現(xiàn),希望對(duì)大家有所幫助2022-11-11
Java鏈表數(shù)據(jù)結(jié)構(gòu)及其簡(jiǎn)單使用方法解析
這篇文章主要介紹了Java鏈表數(shù)據(jù)結(jié)構(gòu)及其簡(jiǎn)單使用方法解析,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-07-07
教你怎么用Java完成人民幣大寫(xiě)轉(zhuǎn)化
這篇文章主要介紹了教你怎么用Java完成人民幣大寫(xiě)轉(zhuǎn)化,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下2021-04-04

