复合文档格式(五) - 短流、短流容器流和短扇区分配表

一.概述

  1. 上一篇学习了主扇区分配表和扇区分配表:http://blog.csdn.net/lipinganq/article/details/76785471
  2. 在复合文档头中的第56 - 59的4个字节指定了标准流(standard streams )的最小大小(一般为4096 bytes),如果一个流的长度小于此值的流即为短流(Short-Stream
  3. 短流不直接使用扇区Sector存储数据,而是全部嵌入到一个特定的内部控制流(internal control stream )中,称其为短流容器流 - short-stream container stream

二.短流容器流 - Short-Stream Container Stream

1. 短流容器流( short-stream container stream )像任何其他(长)用户流一样存储:
  • 第一个使用的扇区必须从目录directory 中的根存储条目(root storage )获取,其SecID链包含在 扇区分配表(SAT)中
  • 短流容器流(short-stream container stream )所使用的所有扇区的数据是根据其SecID链的顺序而来的
  • 在下一步中,该流实际上被分为短扇区(short-sectors,类似于主复合文档文件中的扇区,但是没有复合文档头结构。 因此,第一个短扇区short-sector
    (SecID为 0)总是位于短流容器流内的偏移量0处。 
  • 在复合文档头部的第30 -31的2个字节指定了ssz的大小,最小为7,则扇区sector的大小为2的ssz次方
  • 在复合文档头部的第32 - 33的2个字节指定了sssz的大小,短扇区的真实大小为2的sssz次方,最大值为扇区的大小,详情看:http://blog.csdn.net/lipinganq/article/details/76737002
2. 复合文档 头中包含短扇区的大小。 利用该信息,可以根据SecID计算短扇区在短流容器流中的偏移量:
  • short_sec_pos表示SecID对应的短扇区在短流容器流中的位置
  • short_sec_size表示短扇区的大小
  • sssz就是复合文档头中第32 - 33的2个字节指定了sssz的大小,则短扇区真实大小为2^sssz
short_sec_pos(SecID) = SecID ∙ short_sec_size = SecID ∙ 2^sssz
3. 例子
  • 如果sssz=6,SecID=5
  • short_sec_pos(SecID) = SecID ∙ 2 ^sssz = 5 ∙ 2^6 = 5 ∙ 64 = 320

三.短扇区分配表 - Short-Sector Allocation Table

1. 短扇区分配表short-sector allocation table  SSAT)跟SAT类似,也是一个存储SecID的数组,包含 所有短流的SecID链,类似扇区分配表SAT包含标准流的SecID链
2. SSAT所使用的扇区中的第一个扇区的SecID在复合文档的 头中指定了,由第60 - 63的4个字节指定,其余SecID链包含在扇区分配表SAT中
3. SSAT是通过read和串联所有占据的扇区的内容构建的
4. 一个SSAT占据的扇区的内容:
  • sec_size表示一个扇区的大小,单位为字节
  • 则SSAT占据的扇区可以存储sec_size/4个SecID

5. SSAT的使用与SAT类似,区别在于SSAT中的SecID链指短流容器流中的短扇区

四.总结

1. 短扇区分配表存储了短扇区的SecID,短扇区分配表扇区就是被SSAT所占据的扇区,即SSAT所使用的的扇区
2. SSAT使用的扇区的第一个扇区的SecID从复合文档头中获取
3. SSAT由SAT管理,获得SSAT使用的扇区的第一个扇区的SecID后,通过扇区之间形成的链,可以获得SSAT所使用的所有扇区,形成完整的SSAT

五.下一篇

下一篇 - 复合文档格式(六) - 目录Directory : http://blog.csdn.net/lipinganq/article/details/76828145

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值