日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

复合文档学习(六) - 目录Directory

發布時間:2023/12/20 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 复合文档学习(六) - 目录Directory 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.概述

  • 上一篇學習了有關短流的知識:http://blog.csdn.net/lipinganq/article/details/76804850
  • 接下來介紹一下目錄及目錄條目
  • 二.Directory Structure?- 目錄結構

    1.directory?是由一系列directory entries組成的一個內部控制流。 2.每一個directory entry?指向復合文檔文件中一個倉庫storage或一個流stream
    3.directory entry按照它們在流中出現的順序列舉 4.一個directory entry從0開始的索引叫做directory entry identifier(DirID)

    2.1?directory entry??位置

    • 只要復合文檔中存在倉庫storage或流stream的引用,directory entry的位置就不會改變。?這意味著storage存儲或流stream的DirID永遠不會改變,而不管其他對象被插入或從復合文檔中移除。
    • ?如果一個倉庫storage或流stream被刪除,相應的directory entry被標記為空。
    • ?directory的開頭有一個特殊的directory entry(DirID為0),它代表為?root storage ,稱其為根倉庫條目 -?root storage entry

    2.2 倉庫storage的直接成員

    directory將每個倉庫storage的直接成員(倉庫storage和流stream)組織在一個單獨的紅黑樹red-black tree 中。 紅黑樹中的節點必須滿足以下所有條件:
    • 根節點為黑色。
    • 紅色節點的父節點為黑色。
    • 從根節點到所有葉的路徑包含相同數量的黑色節點。
    • 節點的左子節點小于節點,右子節點較大。
    但請注意,并非所有實施都遵循這些規則。 讀取directory entry的最安全的方法是忽略節點顏色,并從頭重新構建紅黑樹。

    2.3 例子


    • 根倉庫 root storage 由?root storage entry表示,它沒有parent directory entry,因此沒有其他可以組織在紅黑樹中的entry
    • root storage的所有成員(“Storage1”,“Storage2”,“Stream1”,“Stream2”,“Stream3”和“Stream4”)都插入到紅黑樹中。 此樹的根節點?root node的DirID存儲在根倉庫條目?root storage entry中。
    • 倉庫“Storage1”包含一個成員“Stream1”,插入到單獨的紅黑樹中,?“Storage1”的目錄條目directory entry包含“Stream1”的DirID。
    • 倉庫“Storage2”包含三個成員“Stream21”,“Stream22”和“Stream23”。 這些目錄條目directory entries組織在一個單獨的紅黑樹中。 “Storage2”的目錄條目directory entry包含此樹的根節點的DirID。

    2.4 總結

    1.每個directory entry最多包含3個DirID:
    • 第一個DirID是包含此Entry的紅黑樹的左孩子的DirID
    • 第二個DirID是包含此Entry的紅黑樹的右孩子的DirID
    • 如果此Entry是一個倉庫storage,第三個DirID是包含所有子流和子倉庫sub storages的另一個紅黑樹的DirID
    2.節點Nodes按名稱進行比較,以決定它們是否成為另一個節點Node的左或右子節點
    • 如果名稱較短,一個節點小于另一個節點; 如果名稱較長,則更大。
    • 如果兩個名稱的長度相同,則逐個比較(不區分大小寫)
    例子:名稱“VWXYZ”小于名稱“ABCDEFG”,因為前者名稱的長度較短(不管字符V大于字符A的事實)。 名稱“ABCDE”小于名稱“ABCFG”,因為這兩個名稱的長度相等,并且比較名稱表明前一個名稱的第四個字符小于后一個名稱的第四個字符。

    三.?Directory Entries?- 目錄條目

    3.1?Directory Entry Structure?- 目錄條目結構

    1.每個目錄條目directory entry 的大小恰好是128個字節 2.從一個DirID計算目錄流directory stream的偏移量的公式如下: dir_entry_pos(DirID) = DirID ? 1283.?目錄條目結構directory entry structure的內容:

    3.2?Starting Position of a Stream? - 一個流的開始位置

    1.一個directory entry記錄了一個流的入口,既一個流的目錄條目directory entry包含流數據第一個扇區sector或短扇區?short-sector的SecID 2.在復合文檔頭中定義了標準流的大小,所有小于標準流大小的流都以短流short-stream存儲,從而插入到短流容器流?short-stream container stream中,在這種情況下,?短流容器流short-stream container stream中第一個短扇區?short-sector的SecID和短扇區分配表short-sector allocation table用于構建流的SecID chain

    四.Time Stamp?- 時間戳

    1.時間戳字段是一個無符號的64位整數值,包含從1601年1月160日00:00:00(公歷)起經過的時間。 2.該值的一個單位等于100納秒(10-7秒)。 這意味著,每秒鐘的時間戳等于10百萬個單位 3.從時間戳計算日期時,必須尊重閏年處理的正確規則:
    • 能被4整除的year是閏年;
    • 能被100整除的year也可能不是閏年(例如,1900年沒有閏年);
    • 能被400年整除的year是閏年(例如2000年是閏年)。















    總結

    以上是生活随笔為你收集整理的复合文档学习(六) - 目录Directory的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。