簡體   English   中英

在 BufferedInputStream 中讀取方法

[英]read mthod in BufferedInputStream

我在一個教程中看到, BufferedInputStream class 中的 int read (byte b [], int off, int len) 本身使用 read() 方法來讀取數據。

所以我的問題是,普通模式和不使用 BufferedInputStream 和使用緩沖區有什么區別? 緩沖區應該以塊為單位讀取字節以降低成本,但這里是逐字節讀取。

確實,最簡單的具體InputStream只需要實現讀取單個字節的方法(即InputStream.read()方法)。

對於這樣一個使用BufferedInputStream的底層InputStream也確實沒有任何性能優勢,因為BufferedInputStream.read(byte b [], int off, int len)依賴於InputStream.read(byte b [], int off, int len) (在InputStream中)取決於InputStream.read()方法。

然而

Many (most) of the "typical" InputStream subclasses that are used (for example java.io.FileInputStream for reading files, java.net.SocketInputStream for reading from network connections, java.util.zip.ZipFile.ZipFileInputStrem for reading data from zip 文件)確實實現了read(byte b [], int off, int len)方法。

對於所有這些InputStream子類,使用BufferedInputStream在讀取單個字節(即調用read()方法)時提供了巨大的性能優勢,因為這些類執行系統調用以獲取單個字節( FileInputStream ),其他類分配長度為字節的數組一並調用read(byte[] b) (依次調用read(b, 0, b.length) )讀取單個字節( SocketInputStreamZipFileInputStream )。


注意:我用作查找InputStream子類的基礎的項目有 326 個不同的InputStream子類。 我沒有檢查它們中的每一個來確定BufferedInputStream是否對它們有益,我只是檢查了我傾向於使用的那幾個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM