文章分类:Java编程 我们先做一个实验:
1、构建一个测试类 2、把这段代码解析成已经包装了SWF头的ABC文件后为:
(请参考[tamarin系列之6] tamarin外篇---As3Eval )
00000000 46 57 53 09 6c 01 00 00 78 00 03 e8 00 00 0b b8 |FWS.l...x.......|
00000010 00 00 0c 01 00 44 11 08 00 00 00 3f 12 49 01 00 |.....D.....?.I..|
00000020 00 10 00 2e 00 01 01 01 11 00 06 4f 62 6a 65 63 |...........Objec|
00000030 74 05 41 72 72 61 79 06 52 65 67 45 78 70 04 74 |t.Array.RegExp.t|
00000040 65 73 74 10 3c 23 69 6e 74 65 72 6e 61 6c 20 74 |est. .internal.Na|
00000060 6d 65 73 70 61 63 65 06 70 75 62 6c 69 63 05 54 |mespace.public.T|
00000070 65 73 74 41 07 70 72 69 76 61 74 65 09 70 72 6f |estA.private.pro|
00000080 74 65 63 74 65 64 01 61 04 61 61 61 61 0a 24 63 |tected.a.aaaa.$c|
00000090 6f 6e 73 74 72 75 63 74 06 24 63 69 6e 69 74 06 |onstruct.$cinit.|
000000a0 16 01 17 06 08 01 05 0a 18 0a 02 01 03 0c 07 01 |................|
000000b0 02 07 01 03 07 01 04 07 02 07 07 03 08 07 02 09 |................|
000000c0 07 03 0a 09 02 01 07 04 0b 07 04 0c 07 03 0d 04 |................|
000000d0 00 00 0d 00 00 00 0f 02 00 00 10 00 00 00 00 00 |................|
000000e0 00 01 07 08 09 05 00 01 01 0b 01 00 00 02 02 09 |................|
000000f0 06 00 05 04 08 0a 06 00 05 05 08 01 03 03 04 06 |................|
00000100 00 05 02 08 06 06 00 05 03 08 07 04 00 00 04 00 |................|
00000110 01 02 00 01 0c d0 30 f1 05 2c 0e d5 d1 08 01 48 |......0..,.....H|
00000120 47 00 00 01 05 02 00 02 15 f1 05 d0 2a 30 1d 57 |G...........*0.W|
00000130 2a d5 2a 1c d0 49 00 1d d0 30 30 08 01 47 00 00 |*.*..I...00..G..|
00000140 02 01 01 00 01 03 d0 30 47 00 00 03 02 01 00 02 |.......0G.......|
00000150 17 d0 30 f1 05 5d 08 66 08 2a 30 58 00 1d 2a 30 |..0..].f.*0X..*0|
00000160 f1 05 1d 64 2b 68 07 47 00 00 40 00 |...d+h.G..@.|
把这个二进制文件另存 为t.swf
3、新建一个FLEX工程test
然后让其加载t.swf并执行里面的a方法:
4、调试,输出结果为aaaa
=============================================
从1 -> 2 可以通过as3eval制作,它是不需要flex server的,也就是说不需要java等服务器支持
这完全是AS3在解析AS3的代码片段,然后生成ABC字节码
步骤2可以另存为文件,同时也可以参考[tamarin系列之6] tamarin外篇---As3Eval ,不用持久化成文件或数据库内容,而直接读入内存,这些都是可以的
从上面的分析我们可以看出,步骤1可以放入数据库,需要时释放出来马上通过步骤3解析,也可以给用户一个文本框让用户及时输入,在线解析,而这一切 是不通过服务器的
=============================================
利用在线解析,可以做到不用编译,直接序列化成swf文件,然后读取它就可以了,
也就是说,我们用AS3编译了AS3的代码片段
同时,用户可以直接输入内容,在本地进行内存编译解析,从而忽略服务器,也避免了压力
用户也可以通过输入定制的AS3 DSL,提交到数据库保存,使用时,提取这段DSL,进行解析就可以了,
不用再使用服务器端的JAVA编译,避免了安全问题。
使用AS3EVAL制作DSL会跟RUBY的DSL一样灵活,几乎可以定制任何规则,然后在本地进行解析
1、构建一个测试类 2、把这段代码解析成已经包装了SWF头的ABC文件后为:
(请参考[tamarin系列之6] tamarin外篇---As3Eval )
00000000 46 57 53 09 6c 01 00 00 78 00 03 e8 00 00 0b b8 |FWS.l...x.......|
00000010 00 00 0c 01 00 44 11 08 00 00 00 3f 12 49 01 00 |.....D.....?.I..|
00000020 00 10 00 2e 00 01 01 01 11 00 06 4f 62 6a 65 63 |...........Objec|
00000030 74 05 41 72 72 61 79 06 52 65 67 45 78 70 04 74 |t.Array.RegExp.t|
00000040 65 73 74 10 3c 23 69 6e 74 65 72 6e 61 6c 20 74 |est. .internal.Na|
00000060 6d 65 73 70 61 63 65 06 70 75 62 6c 69 63 05 54 |mespace.public.T|
00000070 65 73 74 41 07 70 72 69 76 61 74 65 09 70 72 6f |estA.private.pro|
00000080 74 65 63 74 65 64 01 61 04 61 61 61 61 0a 24 63 |tected.a.aaaa.$c|
00000090 6f 6e 73 74 72 75 63 74 06 24 63 69 6e 69 74 06 |onstruct.$cinit.|
000000a0 16 01 17 06 08 01 05 0a 18 0a 02 01 03 0c 07 01 |................|
000000b0 02 07 01 03 07 01 04 07 02 07 07 03 08 07 02 09 |................|
000000c0 07 03 0a 09 02 01 07 04 0b 07 04 0c 07 03 0d 04 |................|
000000d0 00 00 0d 00 00 00 0f 02 00 00 10 00 00 00 00 00 |................|
000000e0 00 01 07 08 09 05 00 01 01 0b 01 00 00 02 02 09 |................|
000000f0 06 00 05 04 08 0a 06 00 05 05 08 01 03 03 04 06 |................|
00000100 00 05 02 08 06 06 00 05 03 08 07 04 00 00 04 00 |................|
00000110 01 02 00 01 0c d0 30 f1 05 2c 0e d5 d1 08 01 48 |......0..,.....H|
00000120 47 00 00 01 05 02 00 02 15 f1 05 d0 2a 30 1d 57 |G...........*0.W|
00000130 2a d5 2a 1c d0 49 00 1d d0 30 30 08 01 47 00 00 |*.*..I...00..G..|
00000140 02 01 01 00 01 03 d0 30 47 00 00 03 02 01 00 02 |.......0G.......|
00000150 17 d0 30 f1 05 5d 08 66 08 2a 30 58 00 1d 2a 30 |..0..].f.*0X..*0|
00000160 f1 05 1d 64 2b 68 07 47 00 00 40 00 |...d+h.G..@.|
把这个二进制文件另存 为t.swf
3、新建一个FLEX工程test
然后让其加载t.swf并执行里面的a方法:
4、调试,输出结果为aaaa
=============================================
从1 -> 2 可以通过as3eval制作,它是不需要flex server的,也就是说不需要java等服务器支持
这完全是AS3在解析AS3的代码片段,然后生成ABC字节码
步骤2可以另存为文件,同时也可以参考[tamarin系列之6] tamarin外篇---As3Eval ,不用持久化成文件或数据库内容,而直接读入内存,这些都是可以的
从上面的分析我们可以看出,步骤1可以放入数据库,需要时释放出来马上通过步骤3解析,也可以给用户一个文本框让用户及时输入,在线解析,而这一切 是不通过服务器的
=============================================
利用在线解析,可以做到不用编译,直接序列化成swf文件,然后读取它就可以了,
也就是说,我们用AS3编译了AS3的代码片段
同时,用户可以直接输入内容,在本地进行内存编译解析,从而忽略服务器,也避免了压力
用户也可以通过输入定制的AS3 DSL,提交到数据库保存,使用时,提取这段DSL,进行解析就可以了,
不用再使用服务器端的JAVA编译,避免了安全问题。
使用AS3EVAL制作DSL会跟RUBY的DSL一样灵活,几乎可以定制任何规则,然后在本地进行解析