2017-06-08 56 views
1

我有下面的代碼從一個CSV閱讀:有沒有理由不用BufferedReader封裝InputStreamReader?

InputStream inp = getClass().getResourceAsStream(filename); 
InputStreamReader r = new InputStreamReader(inp); 
BufferedReader reader = new BufferedReader(r); 

在回答問題: Java BufferedReaderConvert InputStream to BufferedReaderWhat is the difference between Java's BufferedReader and InputStreamReader classes?

的BufferedReader [BR]和InputStreamReader的[ISR]都實現了相同的接口。 BR擁有ISR擁有的其他方法,包括常用的readLine()方法和不太有用但仍然相關的skip()方法。你不一定需要無線電通信局閱讀單個字符,儘管無線電通信局在這方面可以比ISR更有效地做到這一點。唯一顯着的區別是FileReader是ISR的一個子類,但不是BR,儘管我在這個網站上有源文件說FileReader由於其他選擇而不再被真正使用。

我的研究表明ISR可以做的所有事情都由BR做得更好。我是一個年輕的開發者,所以每一個定義或導入的類對我來說都是相關的我試圖把握的是如果某些類不再使用,用新版本或框架代替它們。我想知道更多有經驗的開發人員必須說的。那麼,在使用ISR時有沒有理由不使用BR?

的快速鏈接到API:
BufferedReader
InputStreamReader


+0

那麼,如果你想實現你自己的BufferedReader ... –

+0

一個ISR用於從InputStream讀取。 BR從另一位讀者讀取。所以如果你想從流中讀取數據(通常是這種情況)需要緩衝,那麼你可以同時使用兩者。如果您從內存中的字節/字符,或從已緩衝的輸入流中讀取,或者您知道要讀取的字符數量並立即讀取它們,則不需要緩衝 –

+0

請閱讀[什麼類型的問題我應該避免詢問?](http://stackoverflow.com/help/dont-ask),然後再嘗試提出更多問題。 –

回答

0

我看到你的一篇關於ISR和BR一些混亂。

1)你是說

我的研究說,一切ISR所能做的就是通過BR

做的更好,但讓我們來看看的JavaDoc爲他們每個人:

ISR

public class InputStr eamReader延伸讀卡器

InputStreamReader是字節流以字符 流的橋樑:

BR

讀取從一個字符輸入流文本,緩衝字符,從而 到提供字符,數組和線條的高效讀取。

正如你所看到的ISR將字節轉換爲字符。另一方面需要字符。這就是爲什麼BR需要使用ISR從InputStream中讀取。

2)至於原來的問題爲什麼不使用ISR。你可以明確地做到這一點,但爲了獲得你想要使用BR的性能。你可能會問爲什麼ISR沒有使用緩衝來實現?因爲ISR的目的是做一件好事,那就是讀取字節並將字節轉換爲字符。緩衝部分被移入BR的Decorator類。這樣做是爲了能夠爲任何Reader添加緩衝功能,而不僅僅是ISR。