- 浏览: 224350 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (212)
- 架构师-01-文档目录 (3)
- 架构师-02-组织 (7)
- 架构师-03-实施 (35)
- 架构师-04-监督 (14)
- 架构师-05-工具 (29)
- 架构师-09-引用文集 (63)
- 专题-01-微博应用 (5)
- 专题-02-GoogleEarth (1)
- 专题-03-运行维护 (9)
- 专题-04-经纪人营平 (3)
- 专题-05-RCP&RAP (5)
- 专题-06-框架PK (3)
- 专题-07-Android (13)
- 专题-08-UI (3)
- 专题-liferay6 (6)
- 专题-extjs4 (3)
- 专题-CXF (3)
- 专题-封闭网络的社会化 (0)
- 扯谈 (4)
- 外包 (9)
- 专题-C++ (4)
- 专题-09-BI (2)
- jquery&easyui (2)
- 专题-搜索引擎 (1)
最新评论
-
brighter:
oMapper.configure(Deserializati ...
jackson 抛出 bean 中没有定义字段的错误,只好用 gson -
PassFeed_free:
public Bitmap decode(ImageDecod ...
android universalimageloader 几点改进 -
PassFeed_free:
楼主你好, 请问这个库, 在大屏显示高清图片 ,listvie ...
android universalimageloader 几点改进 -
yonghong:
楼主只是揣测
JIRA4.1 升级到 JIRA5.1 -
abdxj:
"Could NOT parse license t ...
JIRA4.1 升级到 JIRA5.1
应用中需要上传用户图片,不想数据库单独维护图片的信息,想直接从编码定位到图片文件,又不想编码太长,所以需要压缩数字串。
/** * 64进制和10进制的转换类 * * @author * */ public class compressEncodeing { final static String PHOTOS_PREFIX = "H"; final static String DEFUALT_IMAGE_SUBFIX = ".jpg"; final static String PLACEHOLDER = "-"; final static String UNDERLINE = "_"; final static String SEPARATOR = "/"; final static String DOT = "."; final static String[] IMAGES_TYPE = { "bmp", "gif", "jpg", "png" }; final static char[] digits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '+', '/', }; /** * @param args */ public static void main(String[] args) { String url = getEncodePhotoUrl(1234567890, "png"); System.out.println(url); url = getDecodePhotoName(url + "_640x480.png"); System.out.println(url); } /** * 根据 userID 返回图片的 URL 编码 编码规则,共四段组成 * 编码前:H(1位长相册类型)-1234567890(10位长用户ID)-1325137433192(13位毫秒)-2(1位随机码)-3 * (图片类型码) 编码后:H(1位长相册相册)19Bwbi(6位长用户ID)ji8m99E(7位毫秒)-n(1位随机码) * 例:H19Bwbiji8m99E-n * * @param userID * @param shift * @return encoded url */ public static String getEncodePhotoUrl(long userID, String suffix) { int suffixCode = -1; for (int i = 0; i < IMAGES_TYPE.length; i++) { if (IMAGES_TYPE[i].indexOf(suffix) != -1) { suffixCode = i; break; } } return PHOTOS_PREFIX + prefixFormat(CompressNumber(userID, 6), 6) + prefixFormat(CompressNumber(System.currentTimeMillis(), 6), 7) + (CompressNumber((int) (Math.random() * 10), 6)) + (suffixCode == -1 ? 0 : suffixCode); } /** * 根据编码后的图片的 URL 返回真实的图片文件名 编码规则 * 解码前:H(1位长相册相册)19Bwbi(6位长用户ID)ji8m99E(7位毫秒)-n(2位随机码)_640x480(size).png(后缀) * 解码后:H(1位长相册类型)/1234567890(10位长用户ID)/1325137433192(13位毫秒)23(2位随机码) * 例:H19Bwbiji8m99E-n_640x480.png -> * /H/1234567890/132513743319223_640x480.png * * @param url * @return decoded photo file name */ public static String getDecodePhotoName(String url) { // 必须是大于 16位 if (url == null || url.length() < 16) return null; String encodedUrl = url.substring(0, url.indexOf(UNDERLINE)); // 有效编码必须是 16 位 if (encodedUrl == null || encodedUrl.length() != 16) return null; String size = url.substring(url.indexOf(UNDERLINE), url.indexOf(DOT)); String suffix = url.substring(url.indexOf(DOT), url.length()); return encodedUrl.substring(0, 1) + SEPARATOR + UnCompressNumber(encodedUrl.substring(1, 7)) + SEPARATOR + UnCompressNumber(encodedUrl.substring(7, 14)) + UnCompressNumber(encodedUrl.substring(14, 15)) + size + suffix; } /** * 把10进制的数字转换成64进制 * * @param number * @param shift * @return */ private static String CompressNumber(long number, int shift) { char[] buf = new char[64]; int charPos = 64; int radix = 1 << shift; long mask = radix - 1; do { buf[--charPos] = digits[(int) (number & mask)]; number >>>= shift; } while (number != 0); return new String(buf, charPos, (64 - charPos)); } /** * 把64进制的字符串转换成10进制 * * @param decompStr * @return */ private static long UnCompressNumber(String decompStr) { long result = 0; for (int i = decompStr.length() - 1; i >= 0; i--) { if (i == decompStr.length() - 1) { result += getCharIndexNum(decompStr.charAt(i)); continue; } for (int j = 0; j < digits.length; j++) { if (decompStr.charAt(i) == digits[j]) { result += ((long) j) << 6 * (decompStr.length() - 1 - i); } } } return result; } /** * * @param ch * @return */ private static long getCharIndexNum(char ch) { int num = ((int) ch); if (num >= 48 && num <= 57) { return num - 48; } else if (num >= 97 && num <= 122) { return num - 87; } else if (num >= 65 && num <= 90) { return num - 29; } else if (num == 43) { return 62; } else if (num == 47) { return 63; } return 0; } /** * 格式化文本,按固定长度,位数不够在前面补“-” * * @param soucre * 原来的文本 * @param length * 固定长度值 * @return String 格式化后文本 */ public static String prefixFormat(String soucre, int length) { // return String.format("%" + length + "s", soucre).replaceAll(" ", PLACEHOLDER); } }
发表评论
-
集成Hibernate Search做全文检索
2014-05-03 15:42 534集成Hibernate Search做全文检索 原文来自 h ... -
Base64扩展,自定义字串和顺序
2012-12-06 11:10 1675Base64很标准,sun 的 jdk 包含了实现,JS ... -
避免跨域问题 ajax proxy
2012-12-04 09:31 808前端全是 AJAX 框架,其中用到一些动态 API 调用,动静 ... -
Arc-03-32 用户事件跟踪
2012-07-05 15:25 722参照 clickstream 项目,保存到数据库 1.实现原 ... -
CXF 结合jaxb返回json字符串时,当属性为数值型字符串时,没有双引号问题
2012-06-04 14:00 2090问题:CXF 结合jaxb返回json字符串时,当属性为数值型 ... -
Arc-03-30-Postgresql 数据导出到Sqlite
2012-05-15 09:39 0用了空间数据库 PostGis,所以用了 Postgresql ... -
extjs4 有用的资源链接
2012-05-12 01:07 645对 Ext 扩展的一些小总结 http://laodaoba ... -
Arc-03-29 CXF 实现 REST 方式上传文件
2012-04-09 00:46 3062CXF 实现 REST 方式上传文件 /** ... -
Arch-03-28 Jndi 配置 Mongodb jetty 实现
2012-03-06 15:20 1619使用 springdata mongodb,直接使用 spri ... -
Arc-03-27-FTP 服务和客户端小结
2012-01-29 18:08 764尽管局域网中传输文件有 n 多方法,samba,webdav, ... -
Arch-03-25-JAVA异常列表
2011-12-20 09:37 909ClassCastException 类型转换异常类 ... -
Arch-03-24- Spring Security 应用
2011-11-08 17:47 1432Spring Security 用了几次,还没有在集群环境中使 ... -
Arch-03-23- ActiveMQ 实践
2011-10-28 15:03 819ActiveMQ 到了非用不可的地步了,学习一下吧。主要用途定 ... -
Arch-03-22- 编程实现多数据源,水平切分,异种数据源
2011-10-20 17:35 810在 Spring 的框架下,通过编程实现多数据源(JDBC), ... -
Arch-03-21- Spring 中调用 Guice 中的注入
2011-10-06 20:27 875当 spring 和 guice 共同存在一个项目中,且 sp ... -
Arch-03-20- Shindig 实践
2011-10-06 16:53 775之前已经抄录了几篇网文,初步了解 shindig 功能与特性, ... -
Arch-03-19- NoSQL实践
2011-09-26 10:27 1332虽然对新技术甚为谨慎,但目前大家所做的伪 sns 的 nosq ... -
Arch-03-18- 用 Mysql-proxy 搭建 MySQL 集群
2011-09-20 10:21 877对应上篇 pgpool2 搭建 postgresql 集群,因 ... -
Arch-03-17- 用 pgpool-II 搭建 PostgreSQL 集群
2011-09-19 10:00 3011(一)方案 尽管做数据库 postgresql 集群的方式 ... -
Arch-03-16- RIA 最佳实践摸索
2011-09-18 11:53 1228RIA 是必须的了,实现 RIA 的路径也特别的多,摸索正确的 ...
相关推荐
"OSX-Arc-White-v1.3.7.tar.gz" 是一个专为Gnome桌面环境设计的苹果风格主题的压缩包文件,旨在将苹果Mac OS X的美观界面风格引入Linux世界,尤其是那些喜欢苹果简洁、优雅设计的Gnome用户。 首先,我们要了解Gnome...
**dcm4chee-arc-5.22.1-mysql.zip** 是一个与医疗影像管理和归档相关的软件包,它是 **dcm4che** 开源项目的一个组件。dcm4chee 设计用于满足 **IHE (Integrating the Healthcare Enterprise)** 的规范,这是一个...
3D-arc-robot-vision.zip,麻省理工学院普林斯顿视觉工具箱,用于在2017亚马逊机器人挑战赛中进行机器人拾取和放置-机器人抓取和一次识别具有深度学习的新物体。,3D建模使用专门的软件来创建物理对象的数字模型。它是...
"Arc-u-boot-1.1.3-20060612.tar.gz" 是一个软件包的名称,其中包含了特定版本的U-BOOT(即1.1.3)针对ARC CPU的定制实现。"ARCU CPU"可能是"ARC User Bootloader"的缩写,是为ARC处理器设计的引导加载程序。"arc600...
**ICOM ARC-20详解** ICOM ARC-20是一款专为无线电爱好者设计的电台控制软件,由知名无线电设备制造商ICOM生产。这款软件主要用于配合ICOM的某些特定型号的电台设备,如ICOM R20接收机,提供丰富的功能以增强用户的...
"弧长法"(Arc-length method)是一种常用的数值方法,用于解决非线性问题,特别是涉及结构稳定性的计算。在MATLAB环境中,可以利用编程来实现这一方法。本压缩包中的"Arc-length.rar"包含了两个关键的MATLAB脚本...
arc-flatabulous-theme, 带有Flatabulous窗口控件的arc 主题 arc-flatabulous主题arc Flatabulous主题是带有 Flatabulous 窗口控件的 arc 主题。 arc-flatabulous可以用于三种变体 arc-flatabulous Arc-Flatabul
标题中的"Python库 | arc-py-0.5.tar.gz"指的是一个名为"arc-py"的Python库的版本0.5,它被压缩在".tar.gz"格式的文件中。这种格式通常用于Linux和Unix系统中,它将多个文件打包成一个单一的归档文件,并使用gzip...
Arc-1.37.0-48361
### FANUC Arc-Mate 100iC 系列弧焊机器人基本描述与特点 FANUC Arc-Mate 100iC 系列是一款专为精确、高速焊接和切割设计的六轴模块化结构电动伺服驱动机器人。该系列包括 Arc-Mate 100iC 和 Arc-Mate 100iC/6L 两...
在IT领域,"arc_length.rar_ARC length_NJ2F_arc-length_arc_length_shakebt2"这个标题可能指的是一个关于弧长参数化方法的压缩文件,其中包含了与弧长编码(Arc-length coding)相关的资料。描述中的"Arc-length ...
此外,dcm4chee-arc-logstash.xml文件可能用于日志收集和分析,这是系统监控和故障排查的重要部分。Logstash是一个强大的日志管理和分析工具,它可以将dcm4chee的运行日志收集并转发到中央的日志存储,以便进行实时...
"Atom-atom-arc-dark-ui,arc dark"是针对Atom编辑器的一个UI(用户界面)主题,设计风格为深色系,旨在提供舒适且对眼睛友好的编码环境。这个主题由Lioneil为Atom社区贡献,增加了编辑器的美观性和个性化选择。 在...
NX二次开发UF_CURVE_LINE_ARC__is_arc_equal 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域...
arc-theme, 具有透明元素的平面主题 arc-主题微软的arc 3和 GNOME 2的透明元素,支持 GTK 3和 GNOME shell,支持基于GTK的桌面环境,如 GNOME,Unity,Budgie,万神庙,Xfce,MATE等等。 arc-可用三种变体 arc
《PyPI官网下载 | ARC-Alkali-Rydberg-Calculator-2.1.2.tar.gz》 本资源是PyPI(Python Package Index)官方提供的一个软件包,名为"ARC-Alkali-Rydberg-Calculator",版本号为2.1.2,其以.tar.gz的压缩格式提供。...
arc-engine9.3最完整许可文件License,其中包括了最完整控件(map,sence等)的许可,没有时间限制,完全破解,是AE开发者必备文件!
这款"中英文转ARC2码编码软件"是专为处理中英文字符而设计的工具,旨在帮助用户将中英文文本转换成ARC2编码格式,以便在单片机程序中使用。 首先,我们要理解编码的基本概念。在计算机世界中,字符(如中英文)需要...
标题中的“arc-rimi.rar_linux arc”表明这是一个与Linux操作系统下的ARCnet网络驱动程序相关的压缩文件,特别是针对“RIM I”(完全内存映射)卡片的驱动。ARCnet是一种古老的局域网(LAN)技术,最初在1980年代...
arc-grey-theme, 具有透明元素中性版本的平面主题 arc-灰色主题美国大陆的arc 3和基于 GTK 2的Gnome 3 。Unity 。Pantheon 。XFCE 。Mate等桌面环境都有一个平面的主题。 下载链接 arc-灰色有三种变体 arc 灰色弧线...