edi*_*233 2 java binary file-io
我有二进制数据文件.这是规格:
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).有关更多信息,请阅读http://edcftp.cr.usgs.gov/pub/data/srtm/Readme.html上的文本文件"SRTM_Topo.txt".
任何人都可以帮助我如何在java中读取此文件?可以将此文件读取到数组,因为我需要对此文件中的元素执行某些操作?
我会把整个文件读成ShortBuffer(所以你选择了endianess)
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();
Run Code Online (Sandbox Code Playgroud)