如何压缩UUID长度?
java中UUID的toString方法,生成的uuid是36位了,在项目中,有时候会显的过长,占用空间比较多,如何能够压缩存储下,又能够保证uuid的唯一性呢?
一、 思路
看源码后,发现UUID的格式是这样的:
<time_low> "-" <time_mid> "-" <time_high_and_version> "-" <variant_and_sequence> "-" <node></>
它是一堆-分割的16进制的数字,如果只是为了保证唯一性,那这些-对我们来说是没有实际的用处的,可以直接去掉,这样我们就节省了4个字节,剩下32个字节。
接下来再想办法继续压缩这32个字节。
16进制的字符一共有16个,等于2的4次方。如果我们去自己对这16个字符进行编码,只需要4个bit就可以表示这16个字符,从0000 - 1111一共16个。
一个byte有8个bit,所以一个字节的高4位和低4位一共能放两个字符编码。
这样我们就能够再节省一半的空间。
最终我们就能够以16个字节存储36个字节的uuid了,空间节省了一半多。
二、 代码编写
private static String compressUUID(UUID uuid) {    StringBuilder resultBuilder = new StringBuilder();    String uuidStr = uuid.toString();    boolean isFirst = false;    int tmp = 0;    for (int i = 0; i < 36; i++) {        if (i == 8 || i == 13 || i == 18 || i == 23) {            continue;        }        char c = uuidStr.charAt(i);        short shortValue = Short.valueOf(String.valueOf(c), 16);        if (!isFirst) {            tmp += shortValue;            isFirst = true;        } else {            tmp = tmp << 4;            tmp += shortValue;            resultBuilder.append((char) tmp);            tmp = 0;            isFirst = false;        }    }    return resultBuilder.toString();}
代码相对比较简单。
for循环一遍,如果遇到-则跳过。
然后把char转换成short,把第一个字符放到short的高四位,把第二个字符放在short的低四位,然后把这个short转成char。
最后拼接成一个字符串。
三、 问题
这样压缩后,能够在代码中正常使用,但是对人来说可读性太差了,如果你打印的话,可能还显示不出来,这一点不是特别好。
大家看还有没有更好的解决方法,一起来讨论下。
如何压缩UUID长度?的更多相关文章
- Base64压缩UUID长度替换Hibernate原有UUID生成器
		
本文来自http://my.oschina.net/noahxiao/blog/132277,个人储藏使用 1.背景 在采用Hibernate做对象映射时,我一直都采用UUID来做主键.由于Hiber ...
 - SAS学习笔记62 通过压缩变量长度来实现数据集压缩
		
有时候从其他数据库过来的字符型变量Length很长,导致数据集文件很大,可以通过压缩变量长度来实现数据集压缩 具体思路: LENGTH语句设置所有变量真实长度 SET数据集的时候对原有变量进行RENA ...
 - 网站压缩数据 GZIP
		
//1.被压缩数据 String str="Hello 你好Hello 你好Hello 你好Hello 你好Hello 你好Hello 你好Hello 你好Hello 你好Hello 你好H ...
 - [转载]MySQL UUID() 函数
		
目录 目录 一 引子 二 MySQL UUID() 函数 三 复制中的 UUID()四 UUID_SHORT() 函数 3.1 实验环境介绍 3.2 搭建复制环境 3.3 基于 STATEMENT 模 ...
 - zlib 压缩输出缓冲区 overflow 问题
		
[TOC] 问题 后台服务传包太大时,我们框架可以使用 zlib 库对响应进行压缩:在这次服务调试过程中,使用 zlib compress2 以 Z_BEST_COMPRESSION 模式进行压缩时, ...
 - UUID那些事
		
UUID那些事 UUID 是一个全局唯一的通用识别码.它使用某种规则,而不是某种中心化的自增方式,来保证这个识别码的全局唯一性.UUID 有非常多的使用场景,比如在分布式系统中,需要生成全局唯一 ID ...
 - luogu P2470 [SCOI2007]压缩
		
传送门 dalao们怎么状态都设的两维以上啊?qwq 完全可以一维状态的说 设\(f[i]\)为前缀i的答案,转移就枚举从前面哪里转移过来\(f[i]=min(f[j-1]+w(j,i))(j\in ...
 - Nginx - 压缩模块
		
1. 前言 在 Nginx 中与网页压缩相关的模块有两个:一个是 HttpGzipModule,另一个是 HttpGzipStaticModule.前者用于启用在文件传输过程中使用 gzip 压缩,而 ...
 - hihoCoder #1320 : 压缩字符串 区间dp
		
/** 题目:hihoCoder #1320 : 压缩字符串 链接:https://hihocoder.com/problemset/problem/1320 描述 小Hi希望压缩一个只包含大写字母' ...
 
随机推荐
- 》》豆瓣API
			
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
 - POJ 2084 Catalan数+高精度
			
POJ 2084 /**************************************** * author : Grant Yuan * time : 2014/10/19 15:42 * ...
 - Java 并发专题 : Executor具体介绍 打造基于Executor的Webserver
			
转载标明出处:http://blog.csdn.net/lmj623565791/article/details/26938985 继续并发,貌似并发的文章非常少有人看啊~哈~ 今天准备具体介绍jav ...
 - Java序列化框架性能比較
			
博客: http://colobu.com jvm-serializers提供了一个非常好的比較各种Java序列化的的測试套件. 它罗列了各种序列化框架. 能够自己主动生成測试报告. 我在AWS c3 ...
 - 教女朋友学Python运行环境搭建
			
下班比较早,吃了饭没什么事,就和女朋友一起研究了Python. 编程语言有很多,为什么选择它呢?因为它火吧,没什么好解释的,下面开始第一步,环境搭建.网上的教程实在太多,各种系统的各种版本,本地链接下 ...
 - Material使用07 MatGridListModule的使用
			
1 MatGridListModule简介 对相似数据的展现,尤其是像是图片的展示 使用起来很像表格 官方文档:点击前往 2 MatGridListModule提供的指令 2.1 mat-grid-l ...
 - springboot整合系列
			
Spring Boot 系列 博客原文:http://blog.csdn.net/isea533/article/details/50412212 Spring Boot 入门 Spring Boot ...
 - springboot+rabbitmq例子
			
demo目录 贴代码 1.ProducerConfig.java package com.test.config; import org.springframework.amqp.core.Bindi ...
 - 智能合约语言 Solidity 教程系列6 - 结构体与映射
			
写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊.智能合约有所了解, 如果你还不了解,建议你先看以太坊是什么 本系列文章一部分是参考Solidity官方文档(当前最新版 ...
 - jmeter+ant+jenkins的自动化接口测试
			
一.Jenkins安装配置 1.安装配置JDK1.7+环境变量: 2.下载jenkins.war,放入D:\jenkins目录下,目录位置随意: Jenkins启动方法: cmd进入Jenkins目录 ...