關(guān)于BufferedReader的read()和readLine()的區(qū)別
BufferedReader的read()和readLine()區(qū)別
從一個(gè)有若干行deep文件中依次讀取各行,處理后輸出,如果用以下方法,則會(huì)出現(xiàn)除第一行外首字符丟失的現(xiàn)象
String str = null; br=new BufferedReader(new FileReader(fileName)); do{ str = buf.readLine()); }while(br.read()!=-1);
以下用法會(huì)使每行都少首字符
while(br.read() != -1){ str = br.readLine(); }
原因在于br.read()!=-1這判斷條件上,因?yàn)樵趫?zhí)行這個(gè)條件的時(shí)候它已經(jīng)讀取了一個(gè)字符,然而在這里并沒有對(duì)讀取出來的這個(gè)字符做處理,所以會(huì)出現(xiàn)少一個(gè)字符,如果你這里寫的是while(br.readLine()!=null)會(huì)出現(xiàn)隔一行少一行。
建議使用一下方法
String str = null; while((str = br.readLine()) != null){ //System.out.println(str);//此時(shí)str就保存了一行字符串 }
這樣應(yīng)該就可以無字符丟失地得到一行了
小結(jié)一下
使用readLine()一定要注意
1:讀入的數(shù)據(jù)要注意有/r,/n或/r/n
2:沒有數(shù)據(jù)時(shí)會(huì)阻塞,在數(shù)據(jù)流異?;驍嚅_時(shí)才會(huì)返回null
3:使用socket之類的數(shù)據(jù)流時(shí),要避免使用readLine(),以免為了等待一個(gè)換行/回車而一直堵塞
項(xiàng)目經(jīng)驗(yàn)
1.讀取一個(gè)txt文件,方法很多種我使用了字符流來讀?。榱朔奖悖?/p>
FileReader fr = new FileReader("f:\\TestJava.Java"); BufferedReader bf = new BufferedReader(fr); //這里進(jìn)行讀取 int b; while((b=bf.read())!=-1){ System.out.println(bf.readLine()); }
發(fā)現(xiàn)每行的第一個(gè)字符都沒有顯示出來,原因呢:b=bf.read())!=-1 每次都會(huì)先讀取一個(gè)字節(jié)出來,所以后面的bf.readLine());讀取的就是每行少一個(gè)字節(jié)。所以,應(yīng)該使用
String valueString = null; while ((valueString=bf.readLine())!=null){ System.out.println(valueString); }
BufferedReader.readLine()總結(jié)
BufferedReader.readLine()
最近寫了段用于獲取執(zhí)行命令的返回值的代碼,如下:
while(br.readLine()!null) { msg=br.readLine(); }
然后顯示的結(jié)果卻是隔行輸出的。想了下, 應(yīng)該是每調(diào)用一次read()或者readLine(),指針都會(huì)移動(dòng)的。所以得到的是隔行輸出。
正確的代碼如下
BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream())); String msg = null; while((msg = br.readLine())!= null) { System.out.println(msg); }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
spring多數(shù)據(jù)源配置實(shí)現(xiàn)方法實(shí)例分析
這篇文章主要介紹了spring多數(shù)據(jù)源配置實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了spring多數(shù)據(jù)源配置相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下2019-12-12