[英]how to handle large amount of float data?
我們有一個包含大量float
數據(大約80MB)的二進制文件。 我們需要在Java應用程序中處理它。 數據來自醫療掃描儀。 一個文件包含一個Rotation
數據。 一個Rotation
包含960個Views
。 一個View
包含16 Rows
和一個Rows
包含1344個Cells
。 這些數字(他們的關系)是固定的。
我們需要將所有浮點數讀入我們的應用程序,其代碼結構反映了關於Rotation-view-row-cell
上述結構。
我們現在正在做的是使用float[]
來保存Cells
數據,然后使用ArrayList
for Rotation
, View
和Row
來保存它們的數據。
我有兩個問題:
假設您沒有對數據進行更改(添加更多視圖等),為什么不將所有內容放在一個大數組中? ArrayLists的重點是你可以增長和縮小它們,這里你不需要它們。 您可以編寫訪問方法以獲取給定視圖,旋轉等的正確單元格。
使用數組數組是一個更好的主意,這樣系統就可以確定如何為您訪問什么,它就像單個數組一樣快。
邁克爾是對的,你需要緩沖輸入,否則你將對每個字節進行文件訪問操作,你的性能會很糟糕。
如果您希望盡可能地堅持當前的方法,可以通過將其容量設置為它們所容納的元素數來最小化ArrayLists使用的內存。 否則他們會保留許多插槽,期望您添加更多插槽。
DataInputStream
(及其readFloat()
方法)包裝FileInputStream
,可能在其間使用e BufferedInputStream
(嘗試緩沖區是否有助於提高性能)。 您當前的方法是否有任何特定的性能/使用問題?
根據您提供的信息,我唯一可以建議的是嘗試將View表示為行和單元格的float [] []。
對於數據加載:
DataInputStream應該可以正常工作。 但請確保將基礎FileInputStream包裝在BufferedInputStream中,否則您將面臨為每個可能會降低性能的浮動執行I / O操作的風險。
保存數據的幾個選項:
我還認為你可以將所有數據結構放入float[][][]
(與Nathan Hughes建議的相同)。 你可以有一個方法來讀取你的文件並返回一個float[][][]
,其中第一個維度是視圖的維度(960),第二個維度是行(16),第三個維度是細胞的維度( 1344):如果這些數字是修復,你最好使用這種方法:你節省內存,而且速度更快。
80 MB應該不是那么多你需要擔心的數據。 我真的建議:
我知道你正在尋找上面描述的商店數據的有效方式,雖然你提到的尺寸不是很大我建議你看看巨大的收藏品。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.