复合文档格式(二) - 仓库与扇区链

一. 概述

  1. 上一篇介绍了复合文档格式(一) - Excel XLS文件格式: http://blog.csdn.net/lipinganq/article/details/76710135
  2. 接下来介绍一下复合文档文件的格式
  3. 复合文档PDF - 中文:http://vdisk.weibo.com/s/uu40yE4gcRNf_
  4. 复合文档PDF - 英文:http://www.openoffice.org/sc/compdocfileformat.pdf

二.仓库(storage)和流(Stream)

  1. 复合文档文件(compound document files)用于构造文件中文档的内容,它将数据分成几个Stream,并将这些Stream存储在文件中的不同仓库(storage)中。
  2. 复合文档文件的原理就像一个完整的文件系统,那些仓库(storage)如同真实文件系统中的子文件夹,那些Stream如同真实文件系统中的文件。
  3. 仓库(storage)和流(Stream)都被命名,一个仓库(storage)下的所有直接子仓库(storages)和所有流(streams)的名称必须是不同的;不同仓库(storage)下的所有直接子仓库(storage)和流(Stream)的名称可能是相同的。
  4. 每个复合文档文件都包含一个根仓库(Root Storage),它是所有其他仓库(storage)和流(stream)的直接或间接父级。
  5. 仓库(storage)和流(stream)存储结构
复合文档格式(二) - 仓库与扇区链_第1张图片

三.扇区(Sector )和扇区链(Sector Chain)

2.1 扇区(Sector)

  1. 复合文档文件的所有流都被划分成小块数据,称为扇区(sector)。
  2. 扇区(sector)可能包含复合文档的内部控制数据或部分用户数据。
  3. 整个文件由头结构(复合文档头)和头结构后面的所有扇区的列表组成。 扇区(sector)的大小可以在头结构中设置,然后对于所有扇区都是固定的。
  4. 扇区(sector)按照他们在文件中的顺序列举,扇区(sector)的索引(base 0)称为扇区标识符(SecID)
复合文档格式(二) - 仓库与扇区链_第2张图片
      5.扇区标识符(SecID)是一个有符号的32位整数值
  • 如果一个SecID不是一个负数,它必须是一个现有扇区(sector)的引用
  • 如果一个SecID是一个负数,它有一个特殊的意义。 下表显示了所有有效的特殊SecID:
复合文档格式(二) - 仓库与扇区链_第3张图片
  • -1 表示该扇区没有用到
  • -2 表示一个SecID链的结尾
  • -3 表示该扇区被扇区分配表SAT使用,即该扇区是扇区分配表的一部分
  • -4 表示该扇区被主扇区分配表MSAT使用,在复合文档头重定义了MSAT的前109个SecID,该SecID对应的扇区被扇区分配表SAT使用,但SAT占据的扇区数超过109个,则需要为MSAT添加额外的扇区。

2.2 扇区链(sector chain)

  1. 用于存储一个流(stream)的数据的所有扇区的列表称为扇区链(sector chain ), 扇区可能看起来无序,并且可能位于文件中的不同位置。因此,SecID数组,SecID链,一个流(stream)的所有扇区的顺序。 SecID链总是以-值2终止。
  2. example:一个流由个扇区(sector)组成,这个流的SecID链是[1, 6, 3, 5, –2] ,
复合文档格式(二) - 仓库与扇区链_第4张图片
3.每个流的SecID链从 扇区分配表构建,除短流( short-streams )和以下两个内部流( internal streams )之外:
  • 主扇区分配表,其自身构建自己的SecID链(每个扇区包含下一个扇区的SecID)
  • 扇区分配表本身,从主扇区分配表构建自己的SecID链

四.下一篇

下一篇 - 复合文档格式(三) - 复合文件头: http://blog.csdn.net/lipinganq/article/details/76737002


你可能感兴趣的:(POI,-,HSSF,-,3.17)