孢子,一种另类的WP7第三方数据交换方式(续)
2011-07-18 15:33
267 查看
接上文:抛砖引玉,孢子,一种另类的WP7第三方应用数据交换方式
上次放出了一个很粗糙的核心源代码,让各位见笑了,本周末经过自己使用测试后发现,悲剧了。。。
为啥?
因为Zune不支持PNG!我擦他微软,怎么这么落后?咋办?改!
只能使用JPG了,经过一番研究,发现JPG更简单,只需要判断结束标记就行了,JPG的结束标记为0xFFD9。而原先设计的数据格式不需要变动。
这样,JPG的结束标记,同时也成为了附加数据的开始标记,经过改造的搜索标记位的方法如下:
上一版写的太挫了,效率很低,改造后大大提升性能
同时上一版EmbedFileStream的Read方法也存在问题,这里改进如下:
好了,废话不多说了,本次同时提供了WP7项目的例子。
源代码&Demo下载:http://files.cnblogs.com/zjfeiye/MoHooSporeDemo.zip
上次放出了一个很粗糙的核心源代码,让各位见笑了,本周末经过自己使用测试后发现,悲剧了。。。
为啥?
因为Zune不支持PNG!我擦他微软,怎么这么落后?咋办?改!
只能使用JPG了,经过一番研究,发现JPG更简单,只需要判断结束标记就行了,JPG的结束标记为0xFFD9。而原先设计的数据格式不需要变动。
这样,JPG的结束标记,同时也成为了附加数据的开始标记,经过改造的搜索标记位的方法如下:
private byte[] EOI = new byte[2] { 0xFF, 0xD9 }; private long GetStartIndex() { this.SourceStream.Seek(0, SeekOrigin.Begin); byte flag1 = this.EOI[0]; byte flag2 = this.EOI[1]; byte[] buffer = new byte[8192]; var readed = this.SourceStream.Read(buffer, 0, buffer.Length); var idx = 0L; while (readed != 0) { for (var i = 0; i < readed; i++) { if (buffer[i] == flag1) { if (i + 1 < readed && buffer[i + 1] == flag2) { return idx + i + 2; } else if (i + 1 == readed) { var read = this.SourceStream.ReadByte(); idx++; if (read == flag2) { return this.SourceStream.Position; } } } } idx += readed; readed = this.SourceStream.Read(buffer, 0, buffer.Length); } return -1; }
上一版写的太挫了,效率很低,改造后大大提升性能
同时上一版EmbedFileStream的Read方法也存在问题,这里改进如下:
public override int Read(byte[] buffer, int offset, int count) { if (this.position + count > this.length) { count = (int)(this.length - this.position); } if (count > 0) { var readed = this.stream.Read(buffer, offset, count); position += readed; return readed; } return 0; }
好了,废话不多说了,本次同时提供了WP7项目的例子。
源代码&Demo下载:http://files.cnblogs.com/zjfeiye/MoHooSporeDemo.zip
相关文章推荐
- 抛砖引玉,孢子,一种另类的WP7第三方应用数据交换方式
- NetFlow是一种数据交换方式,提供网络流量的会话级视图,记录下每个TCP/IP事务的信息
- 大数据分页功能 的一种实现方式
- Linux 下用户空间与内核空间数据交换的方式
- Linux 下用户空间与内核空间数据交换的方式
- 用户空间与内核空间数据交换的方式(9)------netlink
- 【转载】在 Linux 下用户空间与内核空间数据交换的方式,第 2 部分: procfs、seq_file、debugfs和relayfs
- 介绍一种非常好用汇总数据的方式GROUPING SETS
- Linux内核态与用户态数据交换方式(二)
- 用户与内核空间数据交换的方式(8)-syscall
- Linux 用户空间与内核空间数据交换方式
- 用户空间与内核空间数据交换的方式(9)------netlink【转】
- 在 Linux 下用户空间与内核空间数据交换的方式,第 2 部分: procfs、seq_file、debugfs和relayfs
- 用户空间与内核空间数据交换的方式(5)------内核启动参数
- 延云YDB基于spark进行数据分析的一种新方式
- DeviceIoControl函数对应的四种数据交换方式
- 在 Linux 下用户空间与内核空间数据交换的方式,第 1 部分: 内核启动参数、模块参数与sysfs、sysctl、系统调用和netlink
- Linux环境下用户空间与内核空间数据的交换方式
- 在 Linux 下用户空间与内核空间数据交换的方式,第 2 部分: procfs、seq_file、debugfs和relayfs
- JSON(一种轻量级的数据交换格式)格式化工具