首页 > 代码库 > 如何增大二维码种的数据存储
如何增大二维码种的数据存储
最近在做项目,需求就是要传尽量多的数据,属于一个调研,估计后期会加入到项目里面,二维码其实不推荐放入大量数据,但是需求嘛,拿钱干活,可能后期还会优化,因为目前的画扫描的效率不高,主要直接用的原生的开源库zxing感觉效率不高。
一开始,从数据源下手,进行数据源压缩,首先尝试了hufman编码,huffman主要是一些开源的算法,但是实现从建树到压缩,其实有很大区别,文件我直接上传了,有兴趣的可以看一下:
http://download.csdn.net/detail/shidongdong2012/7354863
我发现这种压缩效率并不高,接着我采用了gzip+base64的组合方式,发现效果比较号:
首先在因为gzip压缩要用到zlib,所以我们要在工程里面加libz.dylib,
然后附上实现gzip的压缩实现:
h文件
#import <Foundation/Foundation.h> @interface NSData (GZIP) - (NSData *)gzippedDataWithCompressionLevel:(float)level; - (NSData *)gzippedData; - (NSData *)gunzippedData; @end
- (NSData *)gzippedDataWithCompressionLevel:(float)level { if ([self length]) { z_stream stream; stream.zalloc = Z_NULL; stream.zfree = Z_NULL; stream.opaque = Z_NULL; stream.avail_in = (uint)[self length]; stream.next_in = (Bytef *)[self bytes]; stream.total_out = 0; stream.avail_out = 0; int compression = (level < 0.0f)? Z_DEFAULT_COMPRESSION: (int)(roundf(level * 9)); if (deflateInit2(&stream, compression, Z_DEFLATED, 31, 8, Z_DEFAULT_STRATEGY) == Z_OK) { NSMutableData *data = http://www.mamicode.com/[NSMutableData dataWithLength:ChunkSize];>
注意在m文件种引入#import<zlib.h>让我们看一下压缩实现:
NSData * data = http://www.mamicode.com/[resultStr dataUsingEncoding:NSUTF8StringEncoding];>
resultstr是传入的string,由于gzip只能进行数据压缩,所以要向转成data数据,然后进行压缩,压缩后不能直接转成string,任何编码都不行,由于压缩后的data数据可能出现大量的0,所以在转string的是否会出现字段截断,所以base64的加密处理,能很好的处理这个问题,又保证了数据的安全。看看如果扫描到结果怎么处理吧:
NSData * data = [[NSData alloc] initWithBase64EncodedString:[result text] options:NSDataBase64Encoding64CharacterLineLength]; NSString * str = [[NSString alloc] initWithData:[data gunzippedData] encoding:NSUTF8StringEncoding];
逆向处理一下,由于base64的方法在ios7才存在,所以如果要兼容,还是要朝霞base64的加密算法源码哦,网上的例子也很多,可以看下哦
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。