最近公司要做抓取、java的效率不行、然后就选了 C 做抓取、为提高传输效率要抓取网页的GZIP压缩过的数据、
所以就要求实现 用java 读取 C存放到Memcached中的网页GZIP压缩字符串、并解压出网页文本、
折腾了几天翻了官方文档 看了源码终于解决掉读取的问题了
1、memcached 默认编码集是UTF-8 所以如果存普通文本、那取出来就没有问题。 但是现在存的是压缩的文本字符串、所以用默认的UTF-8取出来就会有问题、就要改它的默认编码集 MemCachedClient mcc = new MemCachedClient("Server"+ind); mcc.setDefaultEncoding("ISO-8859-1");//更改默认编码集(好像只能用ISO-8859-1其他的测试都不行) 2、然后取数据的时候不要用默认的mcc.get(key)方法 换成 mcc.get(key,null,true);区别就在第三个参数
表明get时直接返回String,而不进行解码。
3、 如果你设置了 默认编码集是ISO-8859-1的话 但是取的是普通文本 需要如下转换 s = new String(s.getBytes("ISO-8859-1"),"UTF-8");
4、memcached 默认会对 key 进行 URLEncoder的编码、如果你的key里有特殊字符那key的值就变掉了、如:@会变成%40
//取值设置不对key做编码
mcc.setSanitizeKeys(false);
以上都采用 com.danga.MemCached.MemCachedClient 客户端处理、系统环境win7