2012-08-30 60 views
2

我正在尋找一種方法來從DataInputStream中讀取大量int並將它們加載到數組中。我知道我需要閱讀多少個int,但如果有一種更簡潔的方式,而不是簡單地迭代,它會很好。從DataInputStream讀取int []

只有使用DataInputStream#read(byte[])方法,已經有一種方法可以對字節數組執行此操作,但int[]沒有等效方法。我顯然可以通過創建一個長度乘以4的字節數組將數據讀取到一個字節數組中,但我確實需要使用ints中的數據。

我看到它的方式,有三種可能性,我可以使用:

  1. 不知何故直接加載數據到int[]
  2. 以某種方式將byte[]轉換爲int[]
  3. 遍歷數組,然後使用readInt()

雖然前兩種解決方案更受青睞,但我目前還不知道採用哪種方法。有沒有簡單的方法來做到這一點沒有迭代?

+0

在我看來,循環中的readInt()應該可以正常工作。如果正確打開DataInputStream應該被緩衝,所以開銷會很小。 –

+0

@HotLicks這可能是我最終做的。我只是喜歡這個特殊的代碼儘可能快,因爲我的應用程序可能會做很多文件IO。 –

+0

除非你進入nio的東西(如果有的話),或者本地方法的東西,沒有辦法做內存映射I/O,這樣你就可以直接寫入一個int數組。 –

回答

1

這似乎是唯一的方法來做到這一點是一個簡單的循環和使用readInt()。這是我最終選擇做的。

+0

還沒有找到更有效的方法來讀取大量的整數?我有一個二進制文件,只從整數oconsists,有數百萬整數。 'while'循環與'readInt'是最好的選擇嗎?附:二進制文件由我組成,如果需要,我可以更改文件格式 –

0

您可以嘗試使用ByteBuffer,它可以將數據保留在OS內存中,因此讀取速度非常快。它還有一個getInt()方法,它應該允許您直接讀取整數並將它們放入您的數組中。

+0

從DataInputStream只會更多的開銷vs readInt()。 –

+1

這裏的另一個問題是我實際上使用'DataInputStream'不僅僅是這個int數組。這只是數據的一部分。如果不大幅度增加我需要做的工作量,我無法真正採用另一種方法。 –

+0

@JakeKing有了DataInputStream,你最好也是唯一的選擇是使用'readInt()'循環。我會確保你使用的是BufferedInputStream。 ;) –