2012-08-02 95 views
0

如何在不使用閃存的情況下直接讀寫Adobe Flash Media Server Remote Shared Object (FSO files)以編程方式讀取adobe flash共享對象(FSO)

最好,我想使用python,php或java,但我不介意使用不同的編碼語言。我正在尋找文件結構,所以我可以讀取和寫入文件,就像this app那樣讀取和寫入sol文件。

我需要這個的原因是能夠修復已經在一臺機器上創建的文件,所以他們將爲我設置的新機器設置正確的設置。

謝謝!

編輯

我可以使用記事本看了一些文件內容,但某些字符沒有顯示正確的,例如,從十六進制編輯器檢查了這一點http://pastebin.com/AWdJ2ZcR

附加輸出:

enter image description here

我使用pyamf沒有運氣嘗試3210

我得到了以下錯誤:

raise pyamf.DecodeError('Unknown SOL version in header') 
pyamf.DecodeError: Unknown SOL version in header 
+0

@wvxvw固定,謝謝! – Kuf 2012-08-30 14:14:27

+0

是不是有幫助... :( – Kuf 2012-08-30 15:58:31

+0

你到目前爲止成功嗎? – 2014-04-16 13:32:18

回答

2

這些文件使用AMF格式,這實際上是相當簡單的讀取和寫入。 Python有pyamf庫。 Java有很多類似於3或4的東西,但最常用的兩種是Granite Data Services的一部分,而Adobe之前曾開發過一種--Blaze Data Services。 PHP也有幾個實現,AMFPHP在歷史上是第一個,然後它被分離並且主開發分支合併到Zend Framework中,但是AMFPHP項目本身仍然存在並且正在被處理,但是正在被緩慢地處理。

然而,有一些事情你必須知道:

  1. AMF不一定自定義。這意味着它有一個選項可以發送任意有效負載,實際上有幾個這樣的選項,並不真正相關。

    • 有其描述了以下的有效載荷爲「定製」的標籤類型,即,它僅記錄字節的長度來讀取,該讀取器可以或可以不明白。這對應於在AS3中實施IExternalizable

    • 有一個選項可以從序列化中省略字段,在這種情況下,Flash中創建的對象的實例將與您將從該文件解析的實例不同。這對應於使用[Transient]元數據。

    • 任何人都可以選擇使用AMF作爲包裝,同時以不同的格式進行實際序列化,並且只使用對應於ByteArray類型的標籤。在這種情況下,它對你有一些用處。

  2. AMF 3。0有「擴展」,有趣的是,並非所有格式的用戶都有意使用它們,有時偶然發現這些格式。播放器中的實現至少有VectorDictionary類的特殊標籤類型,但這些不是格式規範的一部分 - 大多數讀者在遇到它們時都不理解這些標籤。

  3. 某些不屬於規範的類在歷史上一直圍繞着讀者實現,這是因爲它們在Flex框架中的共同使用。這些將是ArrayCollection,RemoteMessage和其他幾個。 ArrayCollection尤其重要,因爲它基本上與Array相同,但它是以「自定義」序列化標記發送的。

  4. 瞭解ECMAScript數組的性質和行爲也很重要 - 它們在解碼時可能是服務器故障的來源。 ECMAScript數組是稀疏的,這意味着它們不一定包含0和最大索引之間的所有索引,它們是一個數組(從0開始的第一個連續索引塊)的混合,其餘部分被編碼爲哈希表,其中整數鍵。因此,您可以序列化長度爲2^31的數組,但在將此數組解釋爲實際數組時,無法在服務器端分配這麼多內存。

+0

感謝您的快速和詳盡的答案!我已經嘗試過使用Python的'pyamf'庫,但沒有運氣,我設法讀取'sol'文件,但是不是'fso'文件..你有沒有看過這類文件的任何代碼?謝謝! – Kuf 2012-08-06 07:04:02

+0

不確定是否屬於這種情況,使用記事本我可以讀取大部分文件,但是我沒有知道文件結構,所以我不能讀取所有..在單詞之間有怪異的符號..我已經更新了這個問題。 – Kuf 2012-08-30 13:03:30