2012-04-12 63 views
2

我需要從文件中讀取字節。
使用RandomAccessFile和使用DataInputStream之間是否存在差異(例如效率,內存,運行時間,複雜性和代碼不雅)?用於字節操作的Java RandomAccessFile與DataInputStream

我使用的唯一方法是readByte()。

同樣,對於其他方向,如果所需的全部是writeByte(),那麼RandomAccessFileDataOutputStream之間是否有差別?
RandomAccessFile是雙向的事實不算,讀寫不連接,不能共享)。

是否還有其他更適合這種閱讀和寫作的對象?

回答

3

如果你只做順序訪問,本身它們本質上是等價的;然而,圍繞FileInputStreamBufferedInputStream周圍的DataInputStream將比RandomAccessFile效率更高。

+1

這對我來說非常不直觀,你能解釋一下爲什麼嗎? – Eran 2012-04-13 08:35:00

+0

@Xenorose由於緩衝區。 – EJP 2012-04-13 09:41:59

1

DataInputStream/DataOutputStream如果您只需要連續閱讀/寫入,那就完全沒問題。

如果您需要隨機訪問(如字節數組) - 使用RandomAccessFile

我不認爲它們在內存消耗等方面存在任何顯着差異,因爲它們只是JVM和OS之間的中介。

+0

要創建一個DataInputStream文件,您需要創建一個FileInputStream,而RandomAccessFile可以直接創建(從一個路徑字符串)。這不會影響效率嗎?我不需要隨機訪問,但我不知道它是否真的更適合使用,或者有什麼缺點。 – Eran 2012-04-12 23:41:32

+0

它不會影響效率。當您使用商店設備時,多餘的字節或呼叫無關緊要。這是真的可以忽略不計。用顯微鏡甚至不顯眼。 – 2012-04-13 00:27:46

3

Java IO API中的RandomAccessFile類允許您移動文件並從中讀取文件或按照自己的意願寫入文件。您也可以替換文件的現有部分。這對FileInputStream或FileOutputStream來說是不可能的。