Java IO: 其他字符流(下)
轉(zhuǎn)載自? ?Java IO: 其他字符流(下)
作者:?Jakob?Jenkov?譯者:?李璟(jlee381344197@gmail.com)
本小節(jié)會簡要概括Java?IO中的PushbackReader,LineNumberReader,StreamTokenizer,PrintWriter,StringReader,StringWriter。
PushbackReader
原文鏈接
PushbackReader與PushbackInputStream類似,唯一不同的是PushbackReader處理字符,PushbackInputStream處理字節(jié)。代碼如下:
同樣可以設(shè)置緩沖區(qū)大小,代碼如下:
LineNumberReader
原文鏈接
LineNumberReader是記錄了已讀取數(shù)據(jù)行號的BufferedReader。默認情況下,行號從0開始,當LineNumberReader讀取到行終止符時,行號會遞增(譯者注:換行\(zhòng)n,回車\r,或者換行回車\n\r都是行終止符)。
你可以通過getLineNumber()方法獲取當前行號,通過setLineNumber()方法設(shè)置當前行數(shù)(譯者注:setLineNumber()僅僅改變LineNumberReader內(nèi)的記錄行號的變量值,不會改變當前流的讀取位置。流的讀取依然是順序進行,意味著你不能通過setLineNumber()實現(xiàn)流的跳躍讀取)。代碼如下:
如果解析的文本有錯誤,LineNumberReader可以很方便地定位問題。當你把錯誤報告給用戶時,如果能夠同時把出錯的行號提供給用戶,用戶就能迅速發(fā)現(xiàn)并且解決問題。
StreamTokenizer
原文鏈接
StreamTokenizer(譯者注:請注意不是StringTokenizer)可以把輸入流(譯者注:InputStream和Reader。通過InputStream構(gòu)造StreamTokenizer的構(gòu)造函數(shù)已經(jīng)在JDK1.1版本過時,推薦將InputStream轉(zhuǎn)化成Reader,再利用此Reader構(gòu)造StringTokenizer)分解成一系列符號。比如,句子”Mary?had?a?little?lamb”的每個單詞都是一個單獨的符號。
當你解析文件或者計算機語言時,為了進一步的處理,需要將解析的數(shù)據(jù)分解成符號。通常這個過程也稱作分詞。
通過循環(huán)調(diào)用nextToken()可以遍歷底層輸入流的所有符號。在每次調(diào)用nextToken()之后,StreamTokenizer有一些變量可以幫助我們獲取讀取到的符號的類型和值。這些變量是:
ttype?讀取到的符號的類型(字符,數(shù)字,或者行結(jié)尾符)
sval?如果讀取到的符號是字符串類型,該變量的值就是讀取到的字符串的值
nval?如果讀取到的符號是數(shù)字類型,該變量的值就是讀取到的數(shù)字的值
代碼如下:
譯者注:TT_EOF表示流末尾,TT_EOL表示行末尾。
StreamTokenizer可以識別標示符,數(shù)字,引用的字符串,和多種注釋類型。你也可以指定何種字符解釋成空格、注釋的開始以及結(jié)束等。在StreamTokenizer開始解析之前,所有的功能都可以進行配置。請查閱官方文檔獲取更多信息。
PrintWriter
原文鏈接
與PrintStream類似,PrintWriter可以把格式化后的數(shù)據(jù)寫入到底層writer中。由于內(nèi)容相似,不再贅述。
值得一提的是,PrintWriter有更多種構(gòu)造函數(shù)供使用者選擇,除了可以輸出到文件、Writer以外,還可以輸出到OutputStream中(譯者注:PrintStream只能把數(shù)據(jù)輸出到文件和OutputStream)。
StringReader
原文鏈接
StringReader能夠?qū)⒃甲址D(zhuǎn)換成Reader,代碼如下:
Reader reader = new StringReader("input string..."); int data = reader.read(); while(data != -1) {//do something with data...doSomethingWithData(data);data = reader.read(); } reader.close();StringWriter
原文鏈接
StringWriter能夠以字符串的形式從Writer中獲取寫入到其中數(shù)據(jù),代碼如下:
StringWriter writer = new StringWriter(); //write characters to writer. String data = writer.toString(); StringBuffer dataBuffer = writer.getBuffer();toString()方法能夠獲取StringWriter中的字符串數(shù)據(jù)。
getBuffer()方法能夠獲取StringWriter內(nèi)部構(gòu)造字符串時所使用的StringBuffer對象。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎
總結(jié)
以上是生活随笔為你收集整理的Java IO: 其他字符流(下)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 八仙过海各显神通是什么意思 八仙过海各显
- 下一篇: 鸡肋是什么网络意思 鸡肋的意思