專利名稱:將轉(zhuǎn)換應(yīng)用到多部分文件的機制的制作方法
本申請是由美國的微軟公司在2003年5月17日提出的、指定除了美國以外所有國家的PCT申請。
發(fā)明的背景如今的計算機系統(tǒng)一般在若干文件中存儲了大量數(shù)據(jù)。這些文件的格式可能是與不同的應(yīng)用程序相兼容的多種不同格式的一種,比如文字處理軟件、電子制表軟件和類似軟件。常常有必要將一個文件傳送到另一臺計算機,以便另一個用戶可以了解或操作文件內(nèi)的數(shù)據(jù)。有時,當文件很大時,在文件發(fā)送到另一個計算機之前,需要執(zhí)行文件轉(zhuǎn)換(例如,壓縮)。通過壓縮文件,需要較小的帶寬即可將數(shù)據(jù)發(fā)送到另一計算機。在另外一種情況下,可以執(zhí)行另外一種轉(zhuǎn)換(例如,加密)來保護數(shù)據(jù)使不被未授權(quán)的用戶看見。
這些轉(zhuǎn)換中的一些具有特定的編碼方法并使用單獨的文件(例如,詞典)來存儲關(guān)于特定編碼方法的信息。當訪問轉(zhuǎn)換的文件時必須使用這些單獨的文件。如果單獨的文件被破壞、丟失或無法使用,轉(zhuǎn)換的文件就會變得不可用。另外,由于這些轉(zhuǎn)換中的一些為分解編碼數(shù)據(jù)和處理信息定義了各自特定的編碼方法,一旦文件被轉(zhuǎn)換,文件就不能被共享或具有執(zhí)行于其上的一般的處理。此外,在轉(zhuǎn)換文件之前,當前的轉(zhuǎn)換要求文件內(nèi)的數(shù)據(jù)以連續(xù)字節(jié)來編排。保證文件字節(jié)的保持連續(xù)耗費了大量的額外開銷,并且對于需要頻繁編輯的文件來說是不可行的。這樣,盡管這種轉(zhuǎn)換是很有用的,但其實施方法不能為用戶提供通用的技巧。
發(fā)明概述本發(fā)明是針對一種為用戶提供更加靈活的實現(xiàn)轉(zhuǎn)換的系統(tǒng)和方法。簡要的說,本發(fā)明提供了一種機制,用來存儲和一個多部分文件(multi-part file)內(nèi)的一個或者多個轉(zhuǎn)換相關(guān)的轉(zhuǎn)換信息。多部分文件也包括在其上實施轉(zhuǎn)換的數(shù)據(jù)。因此本發(fā)明為多部分文件提供了一種文件格式以便訪問數(shù)據(jù)的應(yīng)用程序可以容易地訪問轉(zhuǎn)換的數(shù)據(jù)。根據(jù)本發(fā)明,多種數(shù)據(jù)轉(zhuǎn)換可能是鏈接在一起的。這些鏈接的數(shù)據(jù)轉(zhuǎn)換稱為一種“數(shù)據(jù)空間”。每個數(shù)據(jù)空間具有一種鏈接在一起以進行轉(zhuǎn)換的唯一次序和類型。例如兩個數(shù)據(jù)空間可以指定相同轉(zhuǎn)換,但是指定一種不同的順序來實施這些轉(zhuǎn)換。轉(zhuǎn)換信息包含了數(shù)據(jù)空間的有關(guān)信息。
根據(jù)本發(fā)明的另一方面,多部分文件包含多個數(shù)據(jù)流。每一個數(shù)據(jù)流可以是和一個數(shù)據(jù)空間相關(guān)聯(lián)。因此,根據(jù)本發(fā)明的多部分文件內(nèi)的一些數(shù)據(jù)流可被轉(zhuǎn)換,而其它的數(shù)據(jù)流可能保持原來的格式。這種轉(zhuǎn)換特定的數(shù)據(jù)流而無需轉(zhuǎn)換整個多部分文件的能力為用戶提供非常大的靈活性,例如允許用戶僅僅編碼多部分文件內(nèi)的敏感信息(例如,草擬文件)。
因此,本發(fā)明是針對將轉(zhuǎn)換實施到多部分文件上的系統(tǒng)和方法。接收一訪問多部分文件中數(shù)據(jù)流的請求。一接收到這種請求就識別出和數(shù)據(jù)流有關(guān)的轉(zhuǎn)換的目錄。這些目錄也包括在多部分文件內(nèi)。在完成請求之前,在數(shù)據(jù)上執(zhí)行在轉(zhuǎn)換的目錄指定的轉(zhuǎn)換。如果這種請求是一種寫操作,轉(zhuǎn)換編碼這些數(shù)據(jù)。如果這種請求是一種讀操作,這種轉(zhuǎn)換解碼這些數(shù)據(jù)。該轉(zhuǎn)換的目錄是次序相關(guān)的。轉(zhuǎn)換的目錄包括一種數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)包括將數(shù)據(jù)流和該轉(zhuǎn)換的目錄的名稱關(guān)聯(lián)起來的映射的第一數(shù)據(jù)流、列出數(shù)據(jù)流的每一個轉(zhuǎn)換的第二數(shù)據(jù)流、識別和轉(zhuǎn)換相關(guān)的信息的針對所列出的每一個轉(zhuǎn)換的第三數(shù)據(jù)流。
附圖簡述附
圖1是圖解用于本發(fā)明實施例的計算機設(shè)備的功能方塊圖。
附圖2大體上示出了本發(fā)明轉(zhuǎn)換處理的一般功能流程圖。
附圖3是表示圖2所示的轉(zhuǎn)換元數(shù)據(jù)的示例性樹形層次的圖示。
附圖4是轉(zhuǎn)換處理的示意圖。
附圖5是一幅邏輯流程圖,其根據(jù)本發(fā)明的一個實施例大體上示出訪問多部分文件中的轉(zhuǎn)換數(shù)據(jù)的過程。
優(yōu)選實施例的詳細說明本發(fā)明提供了一種將轉(zhuǎn)換應(yīng)用于多部分文件的機制。這種機制提供一種指定轉(zhuǎn)換信息的結(jié)構(gòu)。這種轉(zhuǎn)換信息和轉(zhuǎn)換數(shù)據(jù)在同一個文檔中共同存在。本發(fā)明的這種機制最好優(yōu)先地基于一種多個部分的文件格式,該格式在一個文檔中允許有多種數(shù)據(jù)流類型。發(fā)明人確定對象的鏈接與嵌入(OLE)混合的文件格式尤其非常適合于本發(fā)明的實施例。因此,下面將使用混合文件格式來描述本發(fā)明。然而在仔細閱讀了下面的描述之后,本領(lǐng)域的技術(shù)人員將會認識到其它的多部分文件格式可以執(zhí)行本發(fā)明的實施例,通過對以下描述機制不同的修改來適應(yīng)這些其它的多個文件格式。因此,可以理解的是本發(fā)明的實施例并不限制于這里的描述。
首先,將參考本發(fā)明能夠?qū)嵤┑挠嬎銠C環(huán)境示例來描述本發(fā)明。其次,將詳細描述本發(fā)明一個特定的實施例??蛇x的實施例也可以包括關(guān)于特定實施例的特定細節(jié)。
本發(fā)明示例性的計算機環(huán)境圖1是示例本發(fā)明實施例可以使用的計算機設(shè)備的功能方塊圖。圖1示出了本發(fā)明示例性實施例中使用的典型的計算機設(shè)備,參考圖1,在一個最基本的配置中,計算機設(shè)備100一般至少包括了一個處理器102和系統(tǒng)存儲器104。取決于計算機設(shè)備100的精確結(jié)構(gòu)和類型,系統(tǒng)存儲器104可以是易失的(例如RAM),非易失的(例如ROM,閃存等等)或者兩者的結(jié)合。系統(tǒng)存儲器104一般包括操作系統(tǒng)105,一個或者多個程序模塊106,并可以包括程序數(shù)據(jù)107。程序模塊106的例子包括一個瀏覽器應(yīng)用程序,一個金融管理應(yīng)用程序,字處理軟件和類似的軟件。在圖1中通過虛線108內(nèi)的那些組件來圖解這些基本結(jié)構(gòu)。
計算機設(shè)備100可以具有額外的特點和功能。例如,計算機設(shè)備100也可以包括另外的數(shù)據(jù)存儲設(shè)備(可移除的和/或非可移除的),例如磁盤,光盤或者磁帶。這種額外的存儲器如圖1所示的可移除的存儲器109和非可移除的存儲器110。計算機存儲媒體可以包括用于信息存儲的以任何方式或者技術(shù)實施的易失的和非易失的、可移除的和非可移除的媒體,例如計算機可讀的指令,數(shù)據(jù)結(jié)構(gòu),程序模塊,或者其它數(shù)據(jù)。系統(tǒng)存儲器104、可移除存儲器109和非可移除的存儲器110都是計算機存儲媒體的例子。計算機存儲媒體包括但不局限于RAM,ROM,EEPROM,閃存或者其它存儲技術(shù),CD-ROM,數(shù)字化視頻光盤(DVD)或者其它光存儲器,盒式磁帶,磁帶,磁盤存儲器或者其它磁存儲設(shè)備,或者能用于存儲所需信息并能被計算機設(shè)備100訪問的其它任何媒體。任何這種計算機存儲媒體是設(shè)備100的一部分。計算機設(shè)備100還可以具有輸入設(shè)備112,例如鍵盤,鼠標,輸入筆,語音輸入設(shè)備,觸摸輸入設(shè)備等,也包括了輸出設(shè)備114,例如,顯示器,揚聲器,打印機等。這些設(shè)備都是本領(lǐng)域公知的,在此不必要詳細的進行討論。
計算機設(shè)備100還可以包含允許設(shè)備100和其它計算機設(shè)備118進行通信的通信連接116,例如是通過一個網(wǎng)絡(luò)。通信連接116是通信媒體的一個例子。通信媒體一般可以包含計算機可讀指令,數(shù)據(jù)結(jié)構(gòu),程序模塊,或者以一種調(diào)制的數(shù)據(jù)信號形式的其它數(shù)據(jù),例如,載波或者其它的傳輸機制,并且包括任何信息傳輸媒體。術(shù)語“調(diào)制的數(shù)據(jù)信號”意指一種具有一個或者多個本身字符集的信號,或者以這種方式改變來對信號信息編碼。作為一個例子但不局限于此,通信媒體包括有線媒體,例如有線網(wǎng)絡(luò)或者直接有線連接,和無線媒體,例如聲音,RF,紅外線和其它的無線媒體。這里所用的術(shù)語“計算機可讀媒體”既包括存儲媒體也包括通信媒體。
組件的一般討論圖2是一般地示例本發(fā)明實施例環(huán)境的部件的總覽的功能流程圖。示例的是一個多部分文件202,優(yōu)選的為OLE復(fù)合文件。OLE文件模式是本領(lǐng)域公知的并且被廣泛地認為是在單個的文件中包含很多完全不同數(shù)據(jù)類型的一種機制。OLE復(fù)合文件通常結(jié)合許多嵌入式文件或者和單個文件相關(guān)的其它支持的內(nèi)容一起使用。復(fù)合文件中的每一個元素以一種方式存儲,以使創(chuàng)建該元素的應(yīng)用程序能夠處理這些元素。每一個元素被存儲成一個數(shù)據(jù)流,例如如圖2所示的數(shù)據(jù)流204,206和208。如上面所提到的,每個數(shù)據(jù)流可以是幾種類型中的一種。例如,數(shù)據(jù)流1 204可以是一個字處理文件,數(shù)據(jù)流2 206可以是一個電子表格處理,而數(shù)據(jù)流Z 208可以是一個圖形文件。
過去,在多部分文件202上請求轉(zhuǎn)換時,整個多部分文件202(即數(shù)據(jù)流204-208)都要求必須是連續(xù)的并且一起轉(zhuǎn)換。然而,根據(jù)本發(fā)明,這些數(shù)據(jù)流204-208不必是連續(xù)的。而且,這些數(shù)據(jù)流204-208可以是基于區(qū)段的。在下面的討論中,基于區(qū)段的文件指的是具有多個數(shù)據(jù)塊的文件,這些數(shù)據(jù)被存儲并代表了整個數(shù)據(jù)流。多個塊可以是連續(xù)的存儲,但是一般情況下不是連續(xù)的。在一個實施例中,這些塊是固定大小的,例如固定在512字節(jié)??蛇x地,在不脫離本發(fā)明的范圍之內(nèi)這些塊可以是可變的大小。當這些數(shù)據(jù)流被編輯的時候,可以創(chuàng)建新的數(shù)據(jù)塊,并且以與這些數(shù)據(jù)流有關(guān)的其它的數(shù)據(jù)塊的不連續(xù)的字節(jié)來存儲。因此,基于區(qū)段的文件允許數(shù)據(jù)流的輕松編輯,而沒有確保數(shù)據(jù)流保持連續(xù)性的開銷。
如下面將詳細描述的,本發(fā)明允許指定多部分文件202中與一個數(shù)據(jù)流(例如數(shù)據(jù)流206)有關(guān)的數(shù)據(jù)塊240來執(zhí)行轉(zhuǎn)換,而不是轉(zhuǎn)換其它的數(shù)據(jù)流。由于本發(fā)明允許指定不依賴于其它數(shù)據(jù)流的數(shù)據(jù)流來轉(zhuǎn)換,因此本發(fā)明提供了保護和控制數(shù)據(jù)的巨大的靈活性。例如,圖2示出了數(shù)據(jù)流2 206經(jīng)歷的一個轉(zhuǎn)換過程。數(shù)據(jù)流2 206可以表示包含與特殊項目有關(guān)的花費的一個電子表格。因此,需要對這些花費信息進行保密,以使未授權(quán)的用戶不能查看這些花費。因此,為數(shù)據(jù)流2 206指定的數(shù)據(jù)240經(jīng)歷一系列的轉(zhuǎn)換(例如,轉(zhuǎn)換220-224)。如本領(lǐng)域的普通技術(shù)人員將會理解的是,許多轉(zhuǎn)換可以使鏈接的并且這些鏈接可以是以任何順序的。鏈接的特定的轉(zhuǎn)換和轉(zhuǎn)換鏈接的順序代表了數(shù)據(jù)空間230。一般的,數(shù)據(jù)空間可以指定一個轉(zhuǎn)換或者指定多個轉(zhuǎn)換。在上面的例子中,最后一個轉(zhuǎn)換(例如轉(zhuǎn)換224)將轉(zhuǎn)換了的數(shù)據(jù)寫入駐留在硬盤(未示出)中的數(shù)據(jù)流2 206。下面將結(jié)合附圖4來詳細描述使用該機制將轉(zhuǎn)換應(yīng)用到多部分文件的一個實施例。
本發(fā)明特殊實施例的討論圖3圖示了圖2所示出的代表轉(zhuǎn)換元數(shù)據(jù)210的樹形層次的一個實施例。一般的,樹形層次可以包括在以任何方式和多部分文件相兼容的多部分文件中。下面的討論將結(jié)合復(fù)合式文件來描述樹形層次。總的來說,復(fù)合式文件一般被認為是“文件內(nèi)的文件系統(tǒng)”。在復(fù)合式文件是一個“存儲器”和“數(shù)據(jù)流”的層次,“存儲器”類似于文件系統(tǒng)中的目錄,“數(shù)據(jù)流”類似于文件系統(tǒng)中的文件。在圖3中,方框代表數(shù)據(jù)流,橢圓代表存儲器。在描述本發(fā)明元數(shù)據(jù)210的轉(zhuǎn)換之前,需要注意的一點是數(shù)據(jù)流204-208(圖2中示出的)在這個例子的層次中的根部302之下被圖解。根之下數(shù)據(jù)流的定義是復(fù)合式文件格式中的一項普通技術(shù)。
現(xiàn)在進一步詳細地討論本發(fā)明提供的元數(shù)據(jù)210的轉(zhuǎn)換。脫離根部302命名為“¥006DataSpaces”310的特定存儲器存儲轉(zhuǎn)換元數(shù)據(jù)210。¥006DataSpace存儲器310包含一個DataSpaceMap數(shù)據(jù)流320,一個DataSpaceInfo存儲器330和TransformInfo存儲器340。在本實施例中,選擇用來作為特定存儲器的名稱“¥006DataSpaces”是寫在C編程語言中的。因此,在本實施例中,名稱以單個的非字母數(shù)字標記開頭,該標記的值為6。一般的,分配給該特定存儲器的名稱是任意的,取決于用戶的實施。
DataSpaceMap數(shù)據(jù)流320用其相關(guān)的數(shù)據(jù)空間來和數(shù)據(jù)流(例如,數(shù)據(jù)流204-208)進行映射。在一個實施例中,DataSpaceMap數(shù)據(jù)流320是一個具有兩列的表格數(shù)據(jù)流索引列322和DataSpaceName列324。數(shù)據(jù)流索引列322中的內(nèi)容指的是存儲在復(fù)合式文件中的一個數(shù)據(jù)流(例如,數(shù)據(jù)流204-208)。DataSpaceName列中的內(nèi)容指的是特定的數(shù)據(jù)空間,該數(shù)據(jù)空間定義了數(shù)據(jù)流索引列322中識別的相關(guān)的數(shù)據(jù)流。一個數(shù)據(jù)空間可以和許多數(shù)據(jù)流相關(guān)聯(lián)。例如,如圖3所示的,識別為“DataSpaceNamel”的數(shù)據(jù)空間和數(shù)據(jù)流1 204和數(shù)據(jù)流2 206相關(guān)聯(lián)。然而上面描述的DataSpaceMap數(shù)據(jù)流320將DataSpaceMap數(shù)據(jù)流320描述成一個表格,本領(lǐng)域的普通技術(shù)人員可以理解的是也可以使用其它的數(shù)據(jù)格式來識別和將數(shù)據(jù)流與數(shù)據(jù)空間相關(guān)聯(lián)。
DataSpaceInfo存儲器330包括一或多個DataSpaceName數(shù)據(jù)流(例如,DataSpaceName數(shù)據(jù)流332和334)。在所述的實施例中,DataSpaceName數(shù)據(jù)流依照標準的、復(fù)合式文件短名稱的傳統(tǒng)來命名。每一DataSpaceName數(shù)據(jù)流332和334識別了與各自的DataSpaceName數(shù)據(jù)流332和334有關(guān)的目錄336的轉(zhuǎn)換。在一個實施例中,每一DataSpaceName數(shù)據(jù)流332和334可以是一組由數(shù)據(jù)空間構(gòu)成的有順序的轉(zhuǎn)換的目錄。因為轉(zhuǎn)換堆棧,目錄336的順序是重要的。在一個實施例中,這些目錄336中的第一個轉(zhuǎn)換337稱為“底部”轉(zhuǎn)換,意指這些轉(zhuǎn)換337是接近于底層數(shù)據(jù)流(例如,數(shù)據(jù)流204)中的位。這些目錄336中的最后一個轉(zhuǎn)換339稱為“頂端”轉(zhuǎn)換,意指這些轉(zhuǎn)換339是接近于數(shù)據(jù)(例如,一個應(yīng)用程序)的使用者和生成者和生產(chǎn)者。如同結(jié)合附圖4而在下文進行的詳細描述一樣,這些目錄336中的順序決定經(jīng)過轉(zhuǎn)換的數(shù)據(jù)數(shù)據(jù)流。
TransformInfo存儲器340包括一或多個TransformInstance存儲器(例如,TransformInstance存儲器342,344,和346)。在一個實施例中,這些子存儲器的名稱就是這些轉(zhuǎn)換的名稱。在每一TransformInstance存儲器342、344、和346內(nèi),至少有一個命名為″¥006Primary″350的數(shù)據(jù)流。¥006primary數(shù)據(jù)流350包括特定轉(zhuǎn)換的相關(guān)信息,例如TransformClass類型354和TransformClass名稱356。這種TransformClass類型354表示一種特殊的實現(xiàn)特殊轉(zhuǎn)換的轉(zhuǎn)換類別(例如,LZ壓縮,數(shù)字權(quán)利管理(DRM)保護,等等)。在一個實施例中,TransformClass名稱356指定為唯一地識別這些轉(zhuǎn)換類別的一個字符串(例如,類型)。識別這些類別的字符串可以是實現(xiàn)這些轉(zhuǎn)換類別的類別名稱。TransformClass類型354規(guī)定了一種告知如何解釋TransformClass名稱356中指定的字符串的類型指示符。¥006Primary數(shù)據(jù)流350可能也包含Transformlnstance358的數(shù)據(jù)空間。TransformInstanceData 358存儲被指定為TransformClass名稱356和TransformClass類型354所指定的轉(zhuǎn)換的信息。例如,如果這些轉(zhuǎn)換是一種壓縮轉(zhuǎn)換,TransformInstanceData 358可能包括一個窗口尺寸及類似物。
對于某種轉(zhuǎn)換,TransforraInstanceData 358可以不必允許足夠的空間來存儲必要的信息。因此,作為進一步的改進,本發(fā)明允許轉(zhuǎn)換在TransformInstanceData數(shù)據(jù)流中存儲附加信息(例如,TransformInstanceData數(shù)據(jù)流370)。只要沒有同¥006primary數(shù)據(jù)流350相沖突的名稱就是允許的。TransformInstanceData的種類將依賴于這種轉(zhuǎn)換的類型而變化。
雖然上述樹形層次描述了一個用于利用轉(zhuǎn)換信息存儲了轉(zhuǎn)換數(shù)據(jù)的文件格式的實施例,但是本領(lǐng)域的技術(shù)人員可知,在不影響本發(fā)明操作的情況下,可以改變這種分級結(jié)構(gòu)。因此任何存儲轉(zhuǎn)換信息的樹形層次以及轉(zhuǎn)換數(shù)據(jù)都不會脫離本發(fā)明。附圖4是轉(zhuǎn)換過程的圖形化說明,在該過程中使用根據(jù)本發(fā)明的、用于格式化具有轉(zhuǎn)換數(shù)據(jù)的文件的機制。在這個說明性的轉(zhuǎn)換過程中,應(yīng)用程序400試圖讀和寫在附圖2中描述的多部分文件202。一般說來,轉(zhuǎn)換類別的每個實例將IStream接口作為輸入,將編碼的(即轉(zhuǎn)換的)數(shù)據(jù)輸出到另外一個IStream接口。轉(zhuǎn)換(例如,轉(zhuǎn)換420和422)已經(jīng)登記,并且與數(shù)據(jù)流206有關(guān)的數(shù)據(jù)空間也已經(jīng)指定,例如經(jīng)由OLE復(fù)合文件提供的應(yīng)用編程接口。例如,當首先創(chuàng)建數(shù)據(jù)流206的時候,創(chuàng)建多部分文件202內(nèi)的數(shù)據(jù)流206的應(yīng)用程序負責(zé)指定將哪一個轉(zhuǎn)換應(yīng)用于這些數(shù)據(jù)。這些也許經(jīng)過一個變元表已經(jīng)發(fā)生,所述的每個變元相當于一種轉(zhuǎn)換。
這些讀和寫訪問是經(jīng)過一個OS層。過去,寫操作經(jīng)過IStream接口414訪問數(shù)據(jù)流2 206。然而根據(jù)本發(fā)明,一或多個轉(zhuǎn)換可以插入到IStream接口414之前。每個轉(zhuǎn)換(例如,轉(zhuǎn)換420和422)取IStream接口作為輸入(分別是IStream接口410和412),并且向另一個IStream接口(分別是IStream接口412和414)輸出其中編碼的(即,轉(zhuǎn)換的)數(shù)據(jù)。
同樣地,當應(yīng)用程序400試圖讀多部分文件202內(nèi)的數(shù)據(jù)流2 206的時候,可以插入一或多個逆轉(zhuǎn)換(例如、逆轉(zhuǎn)換450和452)。逆轉(zhuǎn)換的數(shù)目和轉(zhuǎn)換的數(shù)目是相吻合的,這是為了數(shù)據(jù)正確地被解碼以便應(yīng)用程序可以理解數(shù)據(jù)?,F(xiàn)在結(jié)合附圖5來描述在應(yīng)用程序400和數(shù)據(jù)流206之間插入轉(zhuǎn)換的方式。
圖5是一幅邏輯流程圖,用于一般地描述根據(jù)本發(fā)明來訪問復(fù)合式文件內(nèi)的轉(zhuǎn)換數(shù)據(jù)的過程。過程500開始于起始塊501,在此應(yīng)用程序請求訪問多部分文件的數(shù)據(jù)流內(nèi)的數(shù)據(jù)。轉(zhuǎn)換信息210已經(jīng)指定了數(shù)據(jù)流。
在判定框中,確定數(shù)據(jù)流是否是數(shù)據(jù)空間的成員。參考附圖3,在一個實施例中,這是通過在DataSpaceMap內(nèi)檢索識別請求數(shù)據(jù)流的數(shù)據(jù)流索引322來確定的。如果沒有發(fā)現(xiàn)與數(shù)據(jù)流有關(guān)的數(shù)據(jù)流索引322,數(shù)據(jù)流則不具有任何定義的轉(zhuǎn)換且處理進行到最后。在這種情況下,應(yīng)用程序以本發(fā)明以前的方式訪問數(shù)據(jù)。然而,如果數(shù)據(jù)流索引322包含在DataSpaceMap中,則在方框504中處理繼續(xù)進行。
在方框504中,獲得與數(shù)據(jù)流索引有關(guān)的DataSpaceName。DataSpaceName可以是字符串或者是其它任何的格式。
在方框506中,使用從方框504處獲得的DataSpaceName,檢索DataSpacelnfo存儲器來識別和在DataSpaceMap內(nèi)被識別的DataSpaceName有關(guān)的DataSpaceName數(shù)據(jù)流。DataSpaceName數(shù)據(jù)流包含與數(shù)據(jù)空間名字有關(guān)的一轉(zhuǎn)換的目錄。
在方框508中,識別來自目錄中的轉(zhuǎn)換。根據(jù)訪問是寫還是讀,轉(zhuǎn)換可以分別編碼數(shù)據(jù)或解碼數(shù)據(jù)。DataSpaceName數(shù)據(jù)流以指定的次序列出每一個轉(zhuǎn)換。如果訪問是一種寫,順序是從頂端到底端。如果訪問是一種讀,順序是從底端到頂端。
在方框510中,應(yīng)用所識別的轉(zhuǎn)換。當施行轉(zhuǎn)換的時候,使用轉(zhuǎn)換實例數(shù)據(jù)來正確轉(zhuǎn)換數(shù)據(jù)。如果訪問是一種寫,執(zhí)行轉(zhuǎn)換(編碼)。如果訪問是一種讀,執(zhí)行逆轉(zhuǎn)換(解碼)。
在判定塊512中,確定數(shù)據(jù)空間是否包括更進一步的鏈接轉(zhuǎn)換。這可以通過查看目錄336是否還引用轉(zhuǎn)換實例而得以確定。如果在數(shù)據(jù)空間中已經(jīng)施行了最后的轉(zhuǎn)換,最后轉(zhuǎn)換輸出數(shù)據(jù)并且結(jié)束該過程。然而,如果還有另一個轉(zhuǎn)換的目錄,則處理返回到方框508并進行如上所述的處理,直到執(zhí)行了最后的轉(zhuǎn)換。
另外,本領(lǐng)域的技術(shù)人員可以理解的是,處理300所提供的功能可以是以不同的方式來實現(xiàn)。例如,可以存在從數(shù)據(jù)流名稱到轉(zhuǎn)換的目錄的直接映射(跳過數(shù)據(jù)空間的使用)。因此,本發(fā)明包括這些及其他將數(shù)據(jù)流映射到其轉(zhuǎn)換信息的實施例。處理500示出了這樣的一個實施例。
上述說明書、實施例和數(shù)據(jù)提供了本發(fā)明的制造和組合使用的完整的說明。由于在不脫離本發(fā)明的精神和范圍的情況下,可以有很多的實施例,因此本發(fā)明屬于以下所附的權(quán)利要求書。
權(quán)利要求
1.一種計算機執(zhí)行的方法,其特征在于,它包括接收訪問多部分文件中數(shù)據(jù)流的請求;識別和數(shù)據(jù)流有關(guān)的至少一個轉(zhuǎn)換的目錄,該目錄從多部分文件中被識別;并且在結(jié)束請求之前,執(zhí)行轉(zhuǎn)換的目錄中指定的數(shù)據(jù)轉(zhuǎn)換。
2.根據(jù)權(quán)利要求1所述的計算機執(zhí)行方法,其特征在于,所述多部分文件包括OLE復(fù)合文件。
3.根據(jù)權(quán)利要求1所述的計算機執(zhí)行的方法,其特征在于,所述轉(zhuǎn)換的目錄的識別包括檢索數(shù)據(jù)流的數(shù)據(jù)空間映射,數(shù)據(jù)空間映射為數(shù)據(jù)流和與數(shù)據(jù)空間相關(guān)的數(shù)據(jù)空間名稱之間提供了關(guān)連性,數(shù)據(jù)空間定義目錄。
4.根據(jù)權(quán)利要求1所述的計算機執(zhí)行的方法,其特征在于,所述至少一個轉(zhuǎn)換的目錄包括每個所列出的轉(zhuǎn)換的類型和名稱。
5.根據(jù)權(quán)利要求1所述的計算機執(zhí)行方法,其特征在于,所述目錄進一步包括目錄中識別的轉(zhuǎn)換之一的轉(zhuǎn)換實例數(shù)據(jù),所述轉(zhuǎn)換實例數(shù)據(jù)規(guī)定用于解碼所述轉(zhuǎn)換之一所轉(zhuǎn)換的數(shù)據(jù)的相關(guān)信息。
6.根據(jù)權(quán)利要求1所述的計算機執(zhí)行的方法,其特征在于,所述請求是一個數(shù)據(jù)塊的寫請求,在數(shù)據(jù)塊上執(zhí)行所述至少一個轉(zhuǎn)換以創(chuàng)建寫入存儲媒體中的編碼數(shù)據(jù)。
7.根據(jù)權(quán)利要求6所述的計算機執(zhí)行的方法,其特征在于,所述數(shù)據(jù)塊和先前寫入數(shù)據(jù)流的存儲媒體中的數(shù)據(jù)塊是不連續(xù)的。
8.根據(jù)權(quán)利要求6所述的計算機執(zhí)行方法,其特征在于,所述數(shù)據(jù)塊和其它的數(shù)據(jù)流數(shù)據(jù)塊的大小是固定的。
9.根據(jù)權(quán)利要求1所述的計算機執(zhí)行方法,其特征在于,所述目錄包括壓縮轉(zhuǎn)換和加密轉(zhuǎn)換。
10.根據(jù)權(quán)利要求1所述的計算機執(zhí)行方法,其特征在于,所述請求是數(shù)據(jù)塊讀請求,并且所述至少一個轉(zhuǎn)換在從數(shù)據(jù)流中檢索出的數(shù)據(jù)塊上執(zhí)行一逆轉(zhuǎn)換以向請求方提供經(jīng)解碼的數(shù)據(jù)。
11.一種具有將轉(zhuǎn)換應(yīng)用于多部分文件中的機制的計算機系統(tǒng),該計算機系統(tǒng)包括處理器;和存儲器,該存儲器配置有加載到存儲器以被處理器執(zhí)行的多個計算機可執(zhí)行指令,計算機可執(zhí)行指令執(zhí)行一種方法,包括接收訪問多部分文件中的數(shù)據(jù)流的請求;識別和數(shù)據(jù)流相關(guān)聯(lián)的至少一個轉(zhuǎn)換的目錄,該目錄從多部分文件中被識別;以及在完成請求之前,執(zhí)行轉(zhuǎn)換的目錄中指定的數(shù)據(jù)轉(zhuǎn)換。
12.根據(jù)權(quán)利要求11所述的計算機系統(tǒng),其特征在于,所述多部分文件包括OLE復(fù)合文件。
13.根據(jù)權(quán)利要求11所述的計算機系統(tǒng),其特征在于,識別轉(zhuǎn)換的目錄包括搜索數(shù)據(jù)流的數(shù)據(jù)空間映射,該數(shù)據(jù)空間映射為數(shù)據(jù)流和與數(shù)據(jù)空間相關(guān)的數(shù)據(jù)空間名稱之間提供關(guān)連性,數(shù)據(jù)空間定義所述目錄。
14.根據(jù)權(quán)利要求1 1所述的計算機系統(tǒng),其特征在于,所述至少一個轉(zhuǎn)換的目錄包括所列每個轉(zhuǎn)換的類型和名稱。
15.根據(jù)權(quán)利要求11所述的計算機系統(tǒng),其特征在于,所述的目錄進一步包括目錄中識別的轉(zhuǎn)換之一的轉(zhuǎn)換實例數(shù)據(jù),轉(zhuǎn)換實例數(shù)據(jù)指定相關(guān)信息用于解碼由一個轉(zhuǎn)換所轉(zhuǎn)換的數(shù)據(jù)。
16.根據(jù)權(quán)利要求11所述的計算機系統(tǒng),其特征在于,所述的請求是一個數(shù)據(jù)塊的寫請求,在數(shù)據(jù)塊上執(zhí)行至少一個轉(zhuǎn)換來創(chuàng)建寫入存儲媒體中的編碼數(shù)據(jù)。
17.根據(jù)權(quán)利要求16所述的計算機系統(tǒng),其特征在于,所述數(shù)據(jù)塊和其它先前寫入數(shù)據(jù)流的存儲媒體中的數(shù)據(jù)塊是不連續(xù)的。
18.根據(jù)權(quán)利要求16所述的計算機系統(tǒng),其特征在于,所述數(shù)據(jù)塊和其它的數(shù)據(jù)流數(shù)據(jù)塊的大小是固定的。
19.根據(jù)權(quán)利要求11所述的計算機系統(tǒng),其特征在于,所述目錄包括壓縮轉(zhuǎn)換和加密轉(zhuǎn)換。
20.根據(jù)權(quán)利要求11所述的計算機系統(tǒng),其特征在于,所述請求是數(shù)據(jù)塊讀請求,并且所述至少一個轉(zhuǎn)換對從數(shù)據(jù)流中檢索出的數(shù)據(jù)塊執(zhí)行一個逆轉(zhuǎn)換來為請求方提供經(jīng)解碼數(shù)據(jù)。
21.以一種數(shù)據(jù)結(jié)構(gòu)來編碼的計算機可讀媒體,包括第一數(shù)據(jù)流,包括將多部分文件中的數(shù)據(jù)流和轉(zhuǎn)換的目錄的名稱相關(guān)連的映射;第二數(shù)據(jù)流,它列出每一個數(shù)據(jù)流轉(zhuǎn)換;每一個轉(zhuǎn)換的第三數(shù)據(jù)流,第三數(shù)據(jù)流識別與轉(zhuǎn)換相關(guān)聯(lián)的信息。
22.根據(jù)權(quán)利要求21所述的計算機可讀媒體,其特征在于,所述數(shù)據(jù)結(jié)構(gòu)被包括在多部分文件中。
23.根據(jù)權(quán)利要求21所述的計算機可讀媒體,其特征在于,所述用于轉(zhuǎn)換的目錄的名稱可以和多部分文件內(nèi)的多重數(shù)據(jù)流相關(guān)。
24.根據(jù)權(quán)利要求21所述的計算機可讀媒體,其特征在于,所述轉(zhuǎn)換的目錄是隨次序而定的。
25.根據(jù)權(quán)利要求21所述的計算機可讀媒體,其特征在于,所述信息識別轉(zhuǎn)換的類別名稱和類別類型。
26.根據(jù)權(quán)利要求25所述的計算機可讀媒體,其特征在于,所述信息進一步識別和轉(zhuǎn)換相關(guān)聯(lián)的實例數(shù)據(jù)。
27.根據(jù)權(quán)利要求26所述的計算機可讀媒體,其特征在于,所述轉(zhuǎn)換包括壓縮轉(zhuǎn)換,其中的實例數(shù)據(jù)包括壓縮轉(zhuǎn)換的窗口大小。
全文摘要
描述了一種將轉(zhuǎn)換應(yīng)用到多部分文件的系統(tǒng)和方法。接收訪問多部分文件中的數(shù)據(jù)流的請求。接收到請求后,識別和數(shù)據(jù)流相關(guān)的一目錄轉(zhuǎn)換的目錄。該目錄也包括在多部分文件中。在結(jié)束請求之前,執(zhí)行轉(zhuǎn)換的目錄中指定的數(shù)據(jù)轉(zhuǎn)換。如果是一個寫請求,轉(zhuǎn)換編碼這些數(shù)據(jù)。如果是一個讀請求,轉(zhuǎn)換解碼這些數(shù)據(jù)。轉(zhuǎn)換的目錄是次序相關(guān)的。轉(zhuǎn)換的目錄包括具有第一數(shù)據(jù)流的數(shù)據(jù)結(jié)構(gòu),該第一數(shù)據(jù)數(shù)據(jù)流包括將數(shù)據(jù)流和轉(zhuǎn)換的目錄的名稱相關(guān)聯(lián)的映射。列出每個數(shù)據(jù)流的轉(zhuǎn)換的第二數(shù)據(jù)流。所列出的識別和轉(zhuǎn)換相關(guān)的信息的每一個轉(zhuǎn)換的目錄的第三數(shù)據(jù)流。
文檔編號H04N7/025GK1615477SQ03801969
公開日2005年5月11日 申請日期2003年5月17日 優(yōu)先權(quán)日2003年5月17日
發(fā)明者M·J·希爾波格, R·程, D·B·奧恩斯坦, J·M·加希爾 申請人:微軟公司