最近项目(印尼项目)从服务器获取数据 有7000多条 数据量很大 获取数据时间较长 这样很不友好 服务器那边做了优化 把数据进行ISO-8859-1格式压缩
这样得到的数据才50多K 是之前数据的十分之一不到 响应时间大大缩短 服务器返回的数据格式如下图
解码OC代码如下
+ (NSMutableArray *)parseProCityAndAreacountData:(NSDictionary *)result{ int resultCode = [[result objectForKey:@"success"] intValue]; NSMutableArray *resultData; if (resultCode == 1) { NSString *testString = [result objectForKey:@"data"]; NSStringEncoding enc=CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingISOLatin1); NSData *testData = [testString dataUsingEncoding:enc]; NSData *gzipData = [LFCGzipUtility ungzipData:testData]; NSArray *dataArray = [NSJSONSerialization JSONObjectWithData:gzipData options:NSJSONReadingAllowFragments error:nil]; resultData = [[NSMutableArray alloc] initWithCapacity:dataArray.count]; for (int i=0; i<dataArray.count; i++) { NSDictionary *dic = dataArray[i]; Provice *c = [[Provice alloc] init]; c.proName = [dic objectForKey:@"province"]; c.cityName = [dic objectForKey:@"city"]; c.countyareaName = [dic objectForKey:@"countyarea"]; NSString *sectionName = [[NSString stringWithFormat:@"%c",pinyinFirstLetter([c.cityName characterAtIndex:0])] uppercaseString]; NSUInteger firstLetter = [ALPHA rangeOfString:[sectionName substringToIndex:1]].location; c.sortLetters = sectionName; c.firstLetter = [NSString stringWithFormat:@"%lu", (unsigned long)firstLetter]; [resultData addObject:c]; } } return resultData; }
解码Android代码如下
byte[] bytes = s.getBytes("ISO-8859-1"); Log.d("CityRemoteDao", "解压前大小:"+bytes.length); ByteArrayOutputStream baos = new ByteArrayOutputStream(); GZIPInputStream in = new GZIPInputStream(new ByteArrayInputStream(bytes)); byte[] buffer = new byte[1024 * 5]; int len = 0; while ((len = in.read(buffer)) > 0) { baos.write(buffer, 0, len); } bytes = baos.toByteArray(); Log.d("CityRemoteDao", "解压后大小:"+bytes.length); s = new String(bytes, "UTF-8");这里要注意:
1、导入类 LFCGzipUtility.h 这个是别人写好的 类似于安卓GZIPInputStream吧
2、上述LFCGzipUtility类需要 导入libz.dylib / libz.tbd ( for iOS9.0 or later )
LFCGzipUtility下载地址: http://download.csdn.net/detail/lixianyue1991/9833170