本技術(shù)涉及計(jì)算機(jī)輔助設(shè)計(jì),尤其涉及一種ole對(duì)象解析方法、裝置、計(jì)算機(jī)設(shè)備和存儲(chǔ)介質(zhì)。
背景技術(shù):
1、隨著信息技術(shù)的發(fā)展,cad(computer?aided?design)軟件在各行各業(yè)得到廣泛應(yīng)用,cad軟件可有效的幫助設(shè)計(jì)師提高設(shè)計(jì)效率。windows操作系統(tǒng)下,可以將其他軟件的數(shù)據(jù)復(fù)制并粘貼到cad軟件中,如從excel表格中復(fù)制部分表格數(shù)據(jù),并將其粘貼到cad中,cad將該數(shù)據(jù)保存為ole(object?linking?and?embedding)對(duì)象,并顯示為一個(gè)表格。由此可以實(shí)現(xiàn)cad和其他軟件的數(shù)據(jù)交互。傳統(tǒng)技術(shù)中,可以借助windows操作系統(tǒng)的ole和com技術(shù)來(lái)實(shí)現(xiàn),但其存在的問題是linux環(huán)境中沒有相關(guān)的組件支持,所以不能跨平臺(tái)使用,因此無(wú)法正常顯示圖紙中保存的ole對(duì)象數(shù)據(jù),也不能對(duì)其進(jìn)行編輯。
技術(shù)實(shí)現(xiàn)思路
1、本技術(shù)的目的旨在至少能解決上述的技術(shù)缺陷之一,特別是提供了一種可以在linux環(huán)境下對(duì)ole對(duì)象進(jìn)行解析,從而為ole對(duì)象在cad軟件上正常顯示和操作提供支持的方案。
2、第一方面,本技術(shù)提供了一種ole對(duì)象解析方法,包括:
3、從目標(biāo)圖紙文件中提取出一個(gè)以上ole對(duì)象對(duì)應(yīng)的二進(jìn)制數(shù)據(jù)流;
4、對(duì)于任意一個(gè)二進(jìn)制數(shù)據(jù)流,從二進(jìn)制數(shù)據(jù)流的各個(gè)扇區(qū)中提取并組合得到一個(gè)以上的文件流;
5、遍歷各文件流,根據(jù)文件流中類別標(biāo)識(shí)字段的取值,確定文件流的文件類型;
6、若文件類型反映文件流屬于源文件或顯示文件,則存儲(chǔ)文件流,并記錄下對(duì)應(yīng)的地址信息和文件類型,以在展示目標(biāo)圖紙文件時(shí)根據(jù)對(duì)應(yīng)地址信息讀取出文件流并將文件流按照自身文件類型對(duì)應(yīng)的方式展示。
7、在其中一個(gè)實(shí)施例中,從目標(biāo)圖紙文件中提取出一個(gè)以上ole對(duì)象對(duì)應(yīng)的二進(jìn)制數(shù)據(jù)流,包括:
8、在目標(biāo)圖紙文件對(duì)不同類別的實(shí)體類進(jìn)行反序列化的過程中,判斷當(dāng)前進(jìn)行反序列化的實(shí)體類是否屬于目標(biāo)類;
9、若是,則以目標(biāo)類中各對(duì)象的反序列化對(duì)象作為二進(jìn)制數(shù)據(jù)流,并以目標(biāo)類中各對(duì)象的句柄為鍵、對(duì)應(yīng)的二進(jìn)制數(shù)據(jù)流為值建立ole對(duì)象索引表;
10、在其中一個(gè)實(shí)施例中,對(duì)于任意一個(gè)二進(jìn)制數(shù)據(jù)流,從二進(jìn)制數(shù)據(jù)流的各個(gè)扇區(qū)中提取并組合得到一個(gè)以上的文件流,包括:
11、遍歷ole對(duì)象索引表中所包含的各對(duì)象,基于被遍歷到對(duì)象的句柄和ole對(duì)象索引表,得到目標(biāo)二進(jìn)制數(shù)據(jù)流;
12、根據(jù)目標(biāo)二進(jìn)制數(shù)據(jù)流的文件頭構(gòu)建扇區(qū)配置表,并根據(jù)扇區(qū)配置表確定目錄流對(duì)應(yīng)的所有目錄扇區(qū);
13、遍歷目錄扇區(qū)中的所有目錄入口,判斷被遍歷到的目錄入口的入口類型是否為文件流入口;
14、若否,則繼續(xù)遍歷,若是,則從當(dāng)前目錄入口中提取文件流起始扇區(qū)標(biāo)識(shí);
15、根據(jù)文件流起始扇區(qū)標(biāo)識(shí)和扇區(qū)配置表,從與當(dāng)前目錄入口對(duì)應(yīng)文件流相關(guān)的文件流扇區(qū)中依次提取并拼接得到當(dāng)前目錄入口對(duì)應(yīng)的文件流。
16、在其中一個(gè)實(shí)施例中,在根據(jù)目標(biāo)二進(jìn)制數(shù)據(jù)流的文件頭構(gòu)建扇區(qū)配置表前,還包括:
17、判斷目標(biāo)二進(jìn)制數(shù)據(jù)流前第一數(shù)量字節(jié)的值是否與第一組合相同;
18、若是,則將目標(biāo)二進(jìn)制數(shù)據(jù)流前第二數(shù)量字節(jié)的部分確定為文件頭,其余部分確定為扇區(qū)部分;
19、若否,則繼續(xù)遍歷ole對(duì)象索引表中所包含的各對(duì)象。
20、在其中一個(gè)實(shí)施例中,在將目標(biāo)二進(jìn)制數(shù)據(jù)流前第二數(shù)量字節(jié)的部分確定為文件頭后,還包括:
21、讀取文件頭在第一偏移位置的取值,以確定扇區(qū)數(shù)量;
22、判斷扇區(qū)部分的數(shù)據(jù)長(zhǎng)度是否與扇區(qū)數(shù)量匹配;
23、若是,則轉(zhuǎn)入根據(jù)目標(biāo)二進(jìn)制數(shù)據(jù)流的文件頭構(gòu)建扇區(qū)配置表的步驟繼續(xù)執(zhí)行;
24、若否,則繼續(xù)遍歷ole對(duì)象索引表中所包含的各對(duì)象。
25、在其中一個(gè)實(shí)施例中,根據(jù)文件流起始扇區(qū)標(biāo)識(shí)和扇區(qū)配置表,從與當(dāng)前目錄入口對(duì)應(yīng)文件流相關(guān)的文件流扇區(qū)中依次提取并拼接得到當(dāng)前目錄入口對(duì)應(yīng)的文件流,包括:
26、根據(jù)文件流起始扇區(qū)標(biāo)識(shí)從扇區(qū)配置表中找到對(duì)應(yīng)的扇區(qū)鏈;
27、根據(jù)扇區(qū)鏈,在扇區(qū)部分確定對(duì)應(yīng)的文件流扇區(qū)和讀取順序;
28、根據(jù)讀取順序依次讀取各文件流扇區(qū),并將讀取結(jié)果拼接,得到當(dāng)前目錄入口對(duì)應(yīng)的文件流。
29、在其中一個(gè)實(shí)施例中,判斷被遍歷到的目錄入口的入口類型是否為文件流入口,包括:
30、若被遍歷到的目錄入口在第二偏移位置的取值與第二組合相同,則判定入口類型為文件流入口,否則判定為不是文件流入口。
31、在其中一個(gè)實(shí)施例中,根據(jù)文件流中類別標(biāo)識(shí)字段的取值,確定文件流的文件類型之前,還包括:
32、判斷文件流中一個(gè)以上的目標(biāo)字段的取值是否均屬于設(shè)定有效取值;
33、若是,則執(zhí)行根據(jù)文件流中類別標(biāo)識(shí)字段的取值,確定文件流的文件類型的步驟;
34、若否,則繼續(xù)遍歷文件流。
35、第二方面,本技術(shù)提供了一種ole對(duì)象解析裝置,包括:
36、二進(jìn)制數(shù)據(jù)流提取模塊,用于從目標(biāo)圖紙文件中提取出一個(gè)以上ole對(duì)象對(duì)應(yīng)的二進(jìn)制數(shù)據(jù)流;
37、文件流組合模塊,用于對(duì)于任意一個(gè)ole對(duì)象對(duì)應(yīng)的二進(jìn)制數(shù)據(jù)流,從二進(jìn)制數(shù)據(jù)流的各個(gè)扇區(qū)中提取并組合得到一個(gè)以上的文件流;
38、文件流類型判斷模塊,用于遍歷各文件流,根據(jù)文件流中類別標(biāo)識(shí)字段的取值,確定文件流的文件類型;
39、記錄模塊,用于若文件類型反映文件流屬于源文件或顯示文件,則存儲(chǔ)文件流,并記錄下對(duì)應(yīng)的地址信息和文件類型,以在展示目標(biāo)圖紙文件時(shí)根據(jù)對(duì)應(yīng)地址信息讀取出文件流并將文件流按照自身文件類型對(duì)應(yīng)的方式展示。
40、第三方面,本技術(shù)提供了一種計(jì)算機(jī)設(shè)備,包括一個(gè)或多個(gè)處理器,以及存儲(chǔ)器,存儲(chǔ)器中存儲(chǔ)有計(jì)算機(jī)可讀指令,計(jì)算機(jī)可讀指令被一個(gè)或多個(gè)處理器執(zhí)行時(shí),執(zhí)行上述任一實(shí)施例中的ole對(duì)象解析方法的步驟。
41、第四方面,一種存儲(chǔ)介質(zhì),存儲(chǔ)介質(zhì)中存儲(chǔ)有計(jì)算機(jī)可讀指令,計(jì)算機(jī)可讀指令被一個(gè)或多個(gè)處理器執(zhí)行時(shí),使得一個(gè)或多個(gè)處理器執(zhí)行上述任一實(shí)施例中的ole對(duì)象解析方法的步驟。
42、從以上技術(shù)方案可以看出,本技術(shù)實(shí)施例具有以下優(yōu)點(diǎn):
43、基于本技術(shù)提供的ole對(duì)象解析方法,首先從目標(biāo)圖紙文件中提取出一個(gè)以上ole對(duì)象對(duì)應(yīng)的二進(jìn)制數(shù)據(jù)流,接著針對(duì)每個(gè)二進(jìn)制數(shù)據(jù)流,從其各個(gè)扇區(qū)提取并組合得到一個(gè)以上的文件流,隨后遍歷各文件流,依據(jù)文件流中類別標(biāo)識(shí)字段的取值確定文件類型,最后若文件類型表明文件流屬于源文件或顯示文件,便存儲(chǔ)該文件流并記錄地址信息與文件類型,以便展示目標(biāo)圖紙文件時(shí)能按對(duì)應(yīng)方式展示文件流。通過這一系列步驟能精準(zhǔn)、全面地解析ole對(duì)象,將原本離散在扇區(qū)中的二進(jìn)制數(shù)據(jù)可以組合成完整、連續(xù)的文件流,確定文件類型則為后續(xù)正確展示奠定基礎(chǔ),使得不同類型的文件流能按照自身特性進(jìn)行展示,使其原本嵌入在圖紙文件中的各類信息得以清晰、完整的呈現(xiàn),為用戶在linux環(huán)境下查看和利用圖紙文件中的各類嵌入信息提供了極大便利。