#swf-file #swf #header #parse #parser

swf-headers

用于解析swf文件头部的库

3个不稳定版本

使用旧的Rust 2015

0.2.0 2015年8月29日
0.1.2 2015年8月20日
0.1.1 2015年8月20日

#swf-file中排名5

MIT授权

15KB
217

swf-headers

一个用于读取swf文件头部的库,也可选帮助你读取其余部分。

示例

extern crate swf_headers;

use std::io::Read; // Needed for calling read_to_end()

use swf_headers::SwfHeaders;
use swf_headers::Error as SwfError;
use swf_headers::DecodedSwf;

let (headers, mut decoded_swf) = SwfHeaders::open("example.swf").unwrap_or_else(|err| {
    match err {
        SwfError::IoError(_) => panic!("Oh no! An IO error!"),
        SwfError::NotSwf => panic!("Oh no! It wasn't actually a swf file!")
    }
});

println!("The compression method is {:?}", headers.signature());
println!("The swf version is {}", headers.version());
println!("The file length in bytes is {}", headers.file_length());
println!("The dimensions in pixels are {:?}", headers.dimensions());
println!("The frame rate is {}", headers.frame_rate());
println!("And finally, the frame count is {}!", headers.frame_count());

let mut the_rest_of_the_swf: Vec<u8> = vec![];
decoded_swf.read_to_end(&mut the_rest_of_the_swf).ok().expect("Oh no! Error reading!");
// And then you can do whatever you want with the rest of the swf!

测试

当你必须测试专有二进制文件时,测试会很痛苦。有关更多信息,请参阅tests/README.md。

常见问题解答

问题:为什么创建一个用于解析swf文件的库?

答案:为什么不呢?我有这方面的经验,并且注意到crates.io上没有swf解析工具,所以我确定了市场定位并付诸实践。

问题:这真的需要依赖于两个解压缩库来解析头部吗?

答案:很遗憾,是的。swf规范很糟糕,所以swf文件通常会有头部的一半使用zlib或LZMA进行压缩。

问题:swf规范在哪里?

答案:[链接](https://www.adobe.com/content/dam/Adobe/en/devnet/swf/pdf/swf-file-format-spec.pdf)。如果您计划解析swf的其余部分,您可能需要阅读该文档,但为了理解这个库,您只需要阅读第一章和第27页。

问题:嘿,我有一些使用奇怪flash设置的公有领域swf文件,你想要它们吗?

答案:当然!测试覆盖率是整个过程中最难的部分,所以我可以随时欢迎小swf文件用于测试。

问题:你的代码很糟糕。我能修复它吗?

答案:当然可以!欢迎提交Pull Requests。

依赖关系

~1MB
~18K SLoC