Java中的Nasa二进制文件

时间:2011-11-19 13:44:31

标签: java file-io binary

我有二进制数据文件。这是规范:

  

SRTM数据文件的名称类似于“N34W119.hgt”。做什么的   字母和数字是指,什么是“.hgt”格式?

     

每个数据文件涵盖地球表面的一度经度块的一度纬度。前七个   字符表示块的西南角,有N,S,E,   和W指的是北,南,东,西。就这样   “N34W119.hgt”文件涵盖北纬34至35度经度   西118-119(此文件包括加利福尼亚州洛杉矶市中心)。   文件扩展名“.hgt”代表单词“height”,   意思是提升。它不是格式类型。这些文件是“原始”   格式(无标头,未压缩),16位有符号整数,   以海拔高度测量的海拔,在“地理位置”   (纬度和经度阵列)投影,指示数据空隙   由-32768。国际3弧秒文件有1201列和1201   数据行,总文件大小为2,884,802字节(= 1201 x 1201   x 2)。美国1弧秒文件有3601列和3601行   数据,总文件大小为25,934,402字节(= 3601 x 3601 x   2)。有关更多信息,请阅读文本文件“SRTM_Topo.txt”   http://edcftp.cr.usgs.gov/pub/data/srtm/Readme.html

任何人都可以帮助我如何在java中读取此文件?可以将此文件读取到数组,因为我需要对此文件中的元素执行某些操作吗?

1 个答案:

答案 0 :(得分: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();