2012-08-02 69 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