生物特征 高性能服务 智能交互分享 http://blog.sciencenet.cn/u/bluewind23 带着鲜刺的玫瑰刺得血如雨下一如既往前行!

博文

认识HDF

已有 7156 次阅读 2010-12-27 09:58 |个人分类:高性能服务|系统分类:科研笔记| 科学数据, HDF5, HDF

HDF是用于存储和分发科学数据的一种自我描述、多对象文件格式。HDF是由美国国家超级计算应用中心(NCSA)创建的,以满足不同群体的科学家在不同工程项目领域之需要。HDF可以表示出科学数据存储和分布的许多必要条件。HDF被设计为:
自述性:对于一个HDF文件里的每一个数据对象,有关于该数据的综合信息(元数据)。在没有任何外部信息的情况下,HDF允许应用程序解释HDF文件的结构和内容。
通用性:许多数据类型都可以被嵌入在一个HDF文件里。例如,通过使用合适的HDF数据结构,符号、数字和图形数据可以同时存储在一个HDF文件里。
灵活性:HDF允许用户把相关的数据对象组合在一起,放到一个分层结构中,向数据对象添加描述和标签。它还允许用户把科学数据放到多个HDF文件里。
扩展性:HDF极易容纳将来新增加的数据模式,容易与其他标准格式兼容。
跨平台性:HDF是一个与平台无关的文件格式。HDF文件无需任何转换就可以在不同平台上使用。

HDF提供6种基本数据类型:光栅图像(Raster Image),调色板(Palette),科学数据集(Scientific Data Set),注解(Annotation),虚拟数据(Vdata)和虚拟组(Vgroup)。
Raster Image数据模型被设计成能为光栅图像数据的存储和描述提供一个灵活的方法,包括8比特和24比特光栅图像。
Palette作为颜色查找表提供图像的色谱。它是一个表格,其表中每列的数字表示特定颜色的数字。
Scientific Data Set模型是用来存储和描述科学数据的多维数组。
Vdata模式是用来存储和描述数据表格的结构。
HDF的Annotations是文本字符串,用来描述HDF文件,或HDF文件包含的HDF数据对象。
Vgroup结构模型被设计为与相关数据对象有关。一个Vgroup可以包含另一个Vgroup以及数据对象。任何HDF对象都可以包含在一个Vgroup中。
HDF库为每一个数据模型提供一个应用编程接口。

最好的办法是把HDF文件看成为一本有表格内容的多章节书。HDF文件是“数据书”,其中每章都包含一个不同类型的数据内容。正如书籍用一个目录表列出它的章节一样,HDF文件用“data index”(数据索引)列出其数据内容。
         HDF文件结构包括一个file id(文件号)、至少一个data descriptor(数据描述符)、没有或多个data element(数据内容)数据内容。
file id(文件号)是一个32比特的值,最多占用HDF文件的头4个字节。通过读取这个值,应用程序就知道此文件是否是一个HDF文件。
Data descriptor block(数据描述符块)包含一个数据描述符数值。所有的数据描述符都是12字节长,包含4个域,即一个16比特长的标签,一个16比特的引用字,一个32比特的数据偏移量和一个32比特的数据长度。
tag(标记)是数据描述符域,表示存于相应数据内容的数据类型。例如306是光栅图像对象的识别符。
Reference number(引用号)是一个16比特无符号整型数。HDF文件中的每一个对象,由HDF库和数据描述符中的标签确定一个唯一的引用字。在引用字确定的数据对象期间,标签和引用字不能改变。标签和引用字的结合可以唯一确定文件中对应的数据对象。
引用字没有必要连续指定,因此,在一个具有相同标签区分对象的方法后,不能假设引用字的值有任何意义。有时应用程序员也会发现在他们的程序中把一些另外的信息加到引用字中是很方便的,但必须强调的是,HDF库本身并不识别这些含义。
Data offset field(数据偏移量)是一个32比特无符号整型字。通过存储文件开始时的字节数和数据内容开始时的字节数,指明文件中数据内容的位置。
Length field(长度域)是一个32比特无符号整型字。它表示整个数据内容的字节大小。数据内容增加,其长度也要增加。
Data element(数据成分)是数据对象的原始数据部分,包含每个象素的值。
HDF5被设计为改善HDF4的一些局限性。HDF4的某些局限性有:单个文件不能存放多于20000个对象,单个文件大小也不能大于2G字节。数据模式的兼容性不够好,有过多的对象类型,数据类型太严格。库函数过时和过于复杂,不能有效地支持并行口的I/O,很难用于线程应用中。
HDF5包含如下的改进:
被设计为一种新的格式用来改进HDF4.x,特别是每个文件可以存储更大的文件和更多的对象。
数据模式更简洁、更全面,它包含两个基本结构:多维数组记录结构,和分组结构。
更简洁、更利于工程库和应用编程接口,支持并行I/O,线程和其他一些现代系统和应用要求。

         HDF文件的3层交互
HDF文件可以在几个交互层次中可视。在最底层,HDF是一个存储科学数据的物理文件格式。在它的最高层,HDF是集工具和应用于一体的数据文件,可以对HDF文件中的数据进行修改、显示和分析。在这两个层次之间,HDF是一个能提供高层和底层编程接口的软件库。
基本接口层,或称为底层的应用编程接口(API),是为软件开发者保留的。它是为数据流的直接文件I/O、错误处理、内存管理和物理存储而设计的。它是一个为有经验的HDF程序员提供的软件工具。比较目前从高层接口得到的功能,通过使用这些基本接口层,HDF程序员创建HDF文件时能够做更多的事。底层接口例程只提供C语言。
HDF APIs(HDF应用编程接口)分为两类:多文档接口(用于新版本)和单文档接口(用于旧版本)。多文档接口是提供从一个应用中同时连接几个HDF文件的接口,这点很重要,但单文档接口并不支持这点。用户在开发新的接口和界面时,必须提醒他们是在一个改进了的新接口版本下开发的。为了向上兼容,旧版本仍然保留。
HDF APIs包含几个独立的例程集,每个例程集是专门为简化一种数据类型的存储处理而设计的。这些接口作为单文件和多文件层。尽管每个接口都要求程序调用,但所有底层细节都可以忽略。大多数情况下,只须在正确的时间调用正确的函数,剩下的事就由接口程序处理。多数HDF接口例程都有FORTRAN-77和C语言。也有用于Java 程序员访问HDF文件的Java HDF接口程序。



https://blog.sciencenet.cn/blog-297739-397895.html

上一篇:财务报表分析项目
下一篇:敏捷十二条
收藏 IP: .*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-23 19:51

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部