在java.io.FileInputStream
,有一種方法int read(Byte[] buffer,int offset,int numBytes)
;我們如何使用這個功能 - 這個方法和read(byte[] buffer)
有什麼不同?使用Java的FileInputStream
回答
正如Javadoc中指出(和參數的名稱指示),失調和的numBytes方法只使用緩衝區的一部分,把它的產出分析。
public int read(byte[] b,
int off,
int len)
throws IOException
Parameters:
b - the buffer into which the data is read.
off - the start offset of the data.
len - the maximum number of bytes read.
你可以使用這種方法,如果你想重新使用一個已經有數據的現有緩衝區,你不想破壞(當然,從offset
開始的numBytes
將被覆蓋)。
在Java中,緩衝區中的幾乎所有操作都提供這種類型的接口。正確使用,您可以避免多次複製/緩衝數據。
如果您使用緩衝區同時緩衝和處理來自流的數據,那麼這非常有趣。例如,某些媒體格式的解碼器可能會將數據從流中讀取到緩衝區中,而另一個線程從此緩衝區中獲取值以處理它們。由於緩衝區之前可能會填充某些值,因此您需要在給定偏移量處開始重新填充(因此使用第二個參數)。如果你完全填充緩衝區,你將從頭開始,但只使用已由另一個線程處理的空間,並使用len-param來實現這一點。 – Mnementh 2009-08-04 10:55:59
剛剛從javadoc得到了這個。
從該輸入流中將len個字節的數據讀入字節數組。如果len不爲零,則該方法將阻塞,直到某些輸入可用;否則,不讀取字節並返回0。
參數:
- b - 將所述讀取數據的緩衝器。
- off - 目標數組中的起始偏移b
- len - 讀取的最大字節數。
返回: 讀入緩衝區的總字節數,或-1,如果沒有更多的數據,因爲該文件的結尾已經到達。
http://java.sun.com/javase/6/docs/api/java/io/FileInputStream.html#read(byte[],INT,INT)
這個功能是非常有用的閱讀整個文件到內存中。看到這個例子,
File = new File("/anywhere/anyfile");
InputStream is = new FileInputStream(file);
long fileSize = file.length();
byte[] bytes = new byte[(int)fileSize];
int offset = 0;
int count=0;
while (offset < fileSize) {
count=is.read(bytes, offset, fileSize-offset));
if (count >= 0)
offset += count;
else
throw new IOException("Can't read file "+file.getName());
}
is.close();
// Now bytes has all the complete file.
- 1. 使用URL的Java fileinputstream
- 2. 的Java的FileInputStream使用,如果
- 3. 的Java:單的FileInputStream使用多個DataInputStreams
- 4. FileInputStream錯誤Java
- 5. Android:FileNotFoundException使用FileInputStream
- 6. 使用FileInputStream時發生Java ClassCastException
- 7. 在Java中如何使用FileInputStream
- 8. 使用fileinputstream在java中讀取文件
- 9. 使用FileInputStream時發生Java UnsupportedAudioFileException
- 10. 使用FileInputStream讀取多個對象 - Java
- 11. 的Java NIO和的FileInputStream
- 12. FileNotFoundException當使用FileInputStream
- 13. Web服務中的Java FileInputStream
- 14. 關閉一個Java的FileInputStream
- 15. Java中的FileInputStream和FileOutputStream
- 16. java FileInputStream和FileOutputStream的錯誤
- 17. 的FileInputStream使用包路徑
- 18. java FileInputStream找不到文件
- 19. Java fileinputstream閱讀沒有.read()
- 20. 當我使用FileInputStream時FileNotFoundException
- 21. 增加由Java FileInputStream使用的內部緩衝區大小
- 22. 使用ByteArrayInputStream進行的FileInputStream的
- 23. Java中的RandomAccessFile vs掃描器vs FileInputStream
- 24. Java - 是否需要關閉「新的FileInputStream」?
- 25. 獲取FileInputStream使用的文件
- 26. 使用的FileInputStream得到加密文件
- 27. 如何修改其使用的FileInputStream
- 28. Java:使用FileInputStream逐頁閱讀utf-8文件
- 29. FileInputStream沒有使用Java創建實際文件
- 30. FileInputStream上的NullPointerExeption
要回答這個問題只需要一些批判性思維。考慮到你知道兩個函數之間的方法參數的區別,你認爲*的區別是什麼?將您的猜測與文檔進行比較。 – 2009-08-04 10:48:49