【问题标题】:Nasa binary files in JavaJava 中的 Nasa 二进制文件
【发布时间】:2016-04-10 21:49:39
【问题描述】:

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

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

每个数据文件覆盖地球表面一个纬度乘一度的块。前七个 字符表示街区的西南角,有N、S、E、 W指的是北、南、东和西。就这样 “N34W119.hgt”文件涵盖纬度 34 至 35 北和经度 118-119 West(此文件包括加利福尼亚州洛杉矶市中心)。 文件扩展名“.hgt”仅代表单词“height”, 意思是抬高。它不是格式类型。这些文件是“原始的” 格式(无标头且未压缩),16 位有符号整数, 在“地理”中以海拔米为单位测量的海拔高度 (纬度和经度数组)投影,指示数据空白 通过-32768。国际 3 弧秒文件有 1201 列和 1201 数据行,总文件大小为 2,884,802 字节(= 1201 x 1201 × 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 中读取这个文件?可以将这个文件读入数组,因为我需要对这个文件中的元素做一些操作?

【问题讨论】:

  • 要么你必须找到一个可以读取这种特定格式的库,要么你需要自己解析它。 IE。读取文件内容并解析这些字符、整数并赋予它们意义

标签: java file-io binary


【解决方案1】:

我会将整个文件读入一个 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();

【讨论】:

  • 太棒了。我有另一个问题。我需要以其他顺序读取这些数据,即。最后一个元素应该是第一个,最后一个元素应该是第二个等等。我该怎么做?
  • 您可以使用ShortBuffer.get(int position) 以任意顺序访问short 值。
猜你喜欢
  • 2010-09-26
  • 2011-11-25
  • 1970-01-01
  • 1970-01-01
  • 2020-03-21
  • 2015-07-27
  • 1970-01-01
  • 2021-07-26
  • 2011-07-25
相关资源
最近更新 更多