我有二进制数据文件。这是规范:
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中读取此文件?可以将此文件读取到数组,因为我需要对此文件中的元素执行某些操作吗?
答案 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();