2011-11-19 64 views
2

我有二進制數據的文件。這是規範:Java中的Nasa二進制文件

SRTM數據文件有名稱,如「N34W119.hgt」。 字母和數字涉及什麼,什麼是「.hgt」格式?

每個數據文件覆蓋地球表面一度經度的一度緯度。前7個 字符表示該塊的西南角,其中N,S,E, 和W指的是北部,南部,東部和西部。因此, 「N34W119.hgt」文件覆蓋北緯34至35和經度 118-119 West(該文件包括加利福尼亞州洛杉磯市中心)。 文件擴展名「.hgt」只是表示「高度」一詞, 表示高程。它不是格式類型。在「地理」 (緯度和經度數組)投影中,這些文件處於「原始」 格式(無標題且未壓縮),16位有符號整數, 海拔高度以米爲單位,並顯示數據空白 by -32768。國際3弧秒文件有1201列和1201 行數據,總文件大小爲2,884,802字節(= 1201 x 1201 x 2)。美國1弧秒文件具有3601列和3601行 數據,總文件大小爲25,934,402字節(= 3601×3601× 2)。欲瞭解更多信息,請閱讀在 文本文件「SRTM_Topo.txt」 http://edcftp.cr.usgs.gov/pub/data/srtm/Readme.html

任何人都可以幫助我,我怎麼能讀的java文件?可以將此文件讀取到數組中,因爲我需要對此文件中的元素執行一些操作?

+0

要麼你必須找到讀取該特定格式的庫或者需要解析自己。即閱讀文件內容並解析這些字符,整數並賦予它們意義 – pajton

回答

7

我將整個文件讀入ShortBuffer(所以您選擇的字節序)

FileChannel fc = new FileInputStream(file).getChannel(); 
ByteBuffer bb = ByteBuffer.allocateDirect((int) fc.size()); 
while (bb.remaining() > 0) fc.read(bb); 
fc.close(); 
bb.flip(); 
// choose the right endianness 
ShortBuffer sb = bb.order(ByteOrder.LITTLE_ENDIAN).asShortBuffer(); 
+0

太好了。我有另一個問題。我需要以其他順序讀取這些數據。最後一個元素應該是第一個,最後一個要先是第二個等等。我該怎麼做? – edi233

+0

您可以使用'ShortBuffer.get(int position)'以任何順序訪問'short'值。 –