- 浏览: 838129 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (149)
- ubuntu (27)
- spring (3)
- hibernate (6)
- struts (1)
- jquery (11)
- ext (2)
- ajax (1)
- java (24)
- 设计 (4)
- db (10)
- web (10)
- 软件应用技巧 (6)
- others (2)
- 设计模式 (1)
- subversion (5)
- javascript (2)
- jpa (1)
- windows (6)
- jboss (1)
- junit (2)
- WebSphere (2)
- log4j (2)
- 新闻和感想 (0)
- ldap (3)
- tomcat (6)
- excel (1)
- PDF (1)
- xml (1)
- json (2)
- 正则表达式 (3)
最新评论
-
sunshine_love:
谢啦
svn:ignore 的用处 -
亮0000仔:
非常好。。
JAVA中浮点数的存储 -
u011840397:
你好,备份和还原到指定的目录的参数如何加呢?
svn备份和还原 -
zhglhy:
简单明了,学习了,感谢分享!
Jboss数据源密码加密 -
wmengmeng66:
写的很好,顶
spring中配置proxool数据源
UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),UUID的唯一缺陷在于生成的结果串会比较长。
在Java中生成UUID主要有以下几种方式:
1. JDK1.5
如果使用的JDK1.5的话,那么生成UUID变成了一件简单的事,以为JDK实现了UUID: java.util.UUID,直接调用即可.
UUID uuid = UUID.randomUUID();
2. 第三方开源类库(推荐使用):
最著名的是 JUG .特点上是: 纯Java实现,开源,LGPL协议。采用了Native的方式产生真正的Uuid.而且提供了不同平台的实现,包括:
- Linux / x86
- Windows (98, ME, NT, 2K, XP?) / x86
- Solaris / Sparc
- Mac OS X
- FreeBSD / x86
import org.doomdark.uuid.UUID;
import org.doomdark.uuid.UUIDGenerator;
UUIDGenerator generator = UUIDGenerator.getInstance();
UUID uuid = generator.generateRandomBasedUUID();
import org.doomdark.uuid.UUIDGenerator;
UUIDGenerator generator = UUIDGenerator.getInstance();
UUID uuid = generator.generateRandomBasedUUID();
3. Java代码实现(jdk1.4可运行):
import java.io.IOException; import java.io.ObjectInputStream; import java.io.Serializable; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; public final class UUID implements Serializable, Comparable { private static final long serialVersionUID = 0xbc9903f7986d852fL; private final long mostSigBits; private final long leastSigBits; private transient int version; private transient int variant; private volatile transient long timestamp; private transient int sequence; private transient long node; private transient int hashCode; private static volatile SecureRandom numberGenerator = null; // static final boolean $assertionsDisabled = !UUID.desiredAssertionStatus(); public static void main(String[] args) { System.out.println(UUID.randomUUID()); List list = new ArrayList(); String uid = ""; for (int i = 0; i < 100000; i++) { uid = UUID.randomUUID().toString(); list.add(uid); } System.out.println(list.size()); removeDuplicateObj(list); } private static void removeDuplicateObj(List list) { Set someSet = new HashSet(list); Iterator iterator = someSet.iterator(); List tempList = new ArrayList(); int i = 0; while (iterator.hasNext()) { tempList.add(iterator.next().toString()); i++; } System.out.println(tempList.size()); } private UUID(byte abyte0[]) { version = -1; variant = -1; timestamp = -1L; sequence = -1; node = -1L; hashCode = -1; long l = 0L; long l1 = 0L; // if(!$assertionsDisabled && abyte0.length != 16) // throw new AssertionError(); for(int i = 0; i < 8; i++) l = l << 8 | (long)(abyte0[i] & 0xff); for(int j = 8; j < 16; j++) l1 = l1 << 8 | (long)(abyte0[j] & 0xff); mostSigBits = l; leastSigBits = l1; } public UUID(long l, long l1) { version = -1; variant = -1; timestamp = -1L; sequence = -1; node = -1L; hashCode = -1; mostSigBits = l; leastSigBits = l1; } public static UUID randomUUID() { SecureRandom securerandom = numberGenerator; if(securerandom == null) numberGenerator = securerandom = new SecureRandom(); byte abyte0[] = new byte[16]; securerandom.nextBytes(abyte0); abyte0[6] &= 0xf; abyte0[6] |= 0x40; abyte0[8] &= 0x3f; abyte0[8] |= 0x80; UUID uuid = new UUID(abyte0); return new UUID(abyte0); } public static UUID nameUUIDFromBytes(byte abyte0[]) { MessageDigest messagedigest; try { messagedigest = MessageDigest.getInstance("MD5"); } catch(NoSuchAlgorithmException nosuchalgorithmexception) { throw new InternalError("MD5 not supported"); } byte abyte1[] = messagedigest.digest(abyte0); abyte1[6] &= 0xf; abyte1[6] |= 0x30; abyte1[8] &= 0x3f; abyte1[8] |= 0x80; return new UUID(abyte1); } public static UUID fromString(String s) { String as[] = s.split("-"); if(as.length != 5) throw new IllegalArgumentException((new StringBuffer()) .append("Invalid UUID string: ").append(s).toString()); for(int i = 0; i < 5; i++) as[i] = (new StringBuffer()).append("0x").append(as[i]).toString(); long l = Long.decode(as[0]).longValue(); l <<= 16; l |= Long.decode(as[1]).longValue(); l <<= 16; l |= Long.decode(as[2]).longValue(); long l1 = Long.decode(as[3]).longValue(); l1 <<= 48; l1 |= Long.decode(as[4]).longValue(); return new UUID(l, l1); } public long getLeastSignificantBits() { return leastSigBits; } public long getMostSignificantBits() { return mostSigBits; } public int version() { if(version < 0) version = (int)(mostSigBits >> 12 & 15L); return version; } public int variant() { if(variant < 0) if(leastSigBits >>> 63 == 0L) variant = 0; else if(leastSigBits >>> 62 == 2L) variant = 2; else variant = (int)(leastSigBits >>> 61); return variant; } public long timestamp() { if(version() != 1) throw new UnsupportedOperationException("Not a time-based UUID"); long l = timestamp; if(l < 0L) { l = (mostSigBits & 4095L) << 48; l |= (mostSigBits >> 16 & 65535L) << 32; l |= mostSigBits >>> 32; timestamp = l; } return l; } public int clockSequence() { if(version() != 1) throw new UnsupportedOperationException("Not a time-based UUID"); if(sequence < 0) sequence = (int)((leastSigBits & 0x3fff000000000000L) >>> 48); return sequence; } public long node() { if(version() != 1) throw new UnsupportedOperationException("Not a time-based UUID"); if(node < 0L) node = leastSigBits & 0xffffffffffffL; return node; } public String toString() { return (new StringBuffer()).append(digits(mostSigBits >> 32, 8)).append("-").append(digits(mostSigBits >> 16, 4)) .append("-").append(digits(mostSigBits, 4)).append("-") .append(digits(leastSigBits >> 48, 4)).append("-").append(digits(leastSigBits, 12)).toString(); } private static String digits(long l, int i) { long l1 = 1L << i * 4; return Long.toHexString(l1 | l & l1 - 1L).substring(1); } public int hashCode() { if(hashCode == -1) hashCode = (int)(mostSigBits >> 32 ^ mostSigBits ^ leastSigBits >> 32 ^ leastSigBits); return hashCode; } public boolean equals(Object obj) { if(!(obj instanceof UUID)) return false; if(((UUID)obj).variant() != variant()) { return false; } else { UUID uuid = (UUID)obj; return mostSigBits == uuid.mostSigBits && leastSigBits == uuid.leastSigBits; } } public int compareTo(UUID uuid) { return mostSigBits >= uuid.mostSigBits ? mostSigBits <= uuid.mostSigBits ? leastSigBits >= uuid.leastSigBits ? ((byte) (((byte)(leastSigBits <= uuid.leastSigBits ? 0 : 1)))) : -1 : 1 : -1; } private void readObject(ObjectInputStream objectinputstream) throws IOException, ClassNotFoundException { objectinputstream.defaultReadObject(); version = -1; variant = -1; timestamp = -1L; sequence = -1; node = -1L; hashCode = -1; } public int compareTo(Object obj) { return compareTo((UUID)obj); } }
发表评论
-
运算符优先级
2010-11-04 14:28 1873最近在研究表达式求值,看了下论坛推荐的JSEL和Aviator ... -
log4j日志文件保存路径的设置
2010-08-12 11:56 6736一直都是把log4j的日志文件位置设定成绝对路径,直到今天发 ... -
jsp页面突然不支持EL的问题
2010-07-12 16:11 2083转自http://www.iteye.com/topic/15 ... -
jvm监控
2010-07-08 00:49 15842一直没有做过jvm监控, 总以为要找些专门的工具才能做jvm监 ... -
JAVA从键盘读取输入信息
2010-02-28 17:58 2751import java.io.BufferedReader; ... -
JAVA中浮点数的运算
2010-02-24 15:30 1676问题的提出: 如果我们编译运行下面这个程序会看到什么 ... -
JAVA中控制double和float的精度
2010-02-24 15:21 7715本篇介绍了在JAVA中如何对double或者float的浮点数 ... -
JAVA的位移运算
2010-02-24 10:38 1110左移操作: x << nx可以是byte, ... -
各种排序JAVA实现
2009-12-15 17:25 1135package sort; import ... -
JDK自带VM分析工具jps,jstat,jmap,jconsole
2009-08-13 13:13 1718转自:http://jiajun.iteye.com/blog ... -
javabean属性命名难以为人所知的秘密
2009-07-09 10:46 3544原文:http://www.blogjav ... -
java properties文件读取乱码问题解决之道
2009-06-10 11:09 4783Poperties Editor 插件------ ... -
正则表达式参考
2009-05-21 01:40 965http://www.cnblogs.com/netshuai ... -
Apache Commons Logging 是如何决定使用哪个日志实现类的
2009-05-20 11:36 7625原文是:http://www.blogjava.net/Unm ... -
java keytool 常用命令
2009-05-05 17:10 5420最近在做ssl连接active dir ... -
java.sql.Date,java.sql.Time和java.sql.Timestamp
2009-02-07 13:12 9303java.sql.Date,java.sq ... -
理解Unsupported major.minor version 49.0为何错误
2008-09-09 11:33 2673今天一位同事在发布一个portlet到ibm portal时报 ... -
关于Java异常抛出和处理的思考
2008-07-30 17:38 8013看过不少关于java异常处 ... -
反射私有方法
2008-07-30 10:54 1765曾经碰到一件怪事:Spring可以把构造函数为私有的对象实例也 ... -
jdk5 concurrent 初学
2008-07-22 11:50 2425由于上次发现了ReentrantLock,同步的另外一种实现, ...
相关推荐
GUID是一个128位长的数字,一般用16进制表示。算法的核心思想是结合机器的网卡、当地时间、一个随即数来生成GUID。从理论上讲,如果一台机器每秒产生10000000个GUID,则可以保证(概率意义上)3240年不重复
UUID,全称Universally Unique Identifier,是全局唯一标识符的意思,它在Java中被广泛用于创建唯一的对象标识。UUID16通常指的是一个特定版本的UUID,即UUID版本1(Version 1)。在Java中,UUID类提供了生成不同...
<groupId>com.fasterxml.uuid</groupId> <artifactId>java-uuid-generator <packaging>bundle <name>Java UUID Generator <version>3.1.5</version>
### JAVA UUID 生成知识点 #### 一、UUID 概述 - **定义**: UUID (Universally Unique Identifier) 即全局唯一标识符,是一种用于在分布式系统中唯一标识信息的方法。 - **长度**: UUID 的标准形式为 128 位(16 ...
在Java中,UUID提供了标准的方法来生成全局唯一的标识符。UUID主要由三部分组成:时间戳、随机数和节点ID,这确保了其在全球范围内的唯一性。 首先,我们来看JDK自带的`java.util.UUID`类。这个类提供了多种生成...
JUG,即Java UUID Generator,是一个开源库,扩展了Java标准库中的UUID功能,提供了更高效、更灵活的UUID生成策略。 在Java中,标准库通过`java.util.UUID`类来生成UUID。这个类提供了多种方法,如`randomUUID()`...
Java Uuid生成器(JUG) JUG是一组用于处理UUID的Java类:使用任何标准方法生成UUID,有效输出,排序等。 它根据生成UUID(有关更多说明,另请参见) JUG由Tatu Saloranta( )最初于2002年编写,并且经过多年的...
java uuid 产生全球唯一序号,不重复 可以用作数据库的发号器 mojianpo 转载
在Java编程语言中,生成UUID非常简单,可以直接使用`java.util.UUID`类提供的静态方法。例如,`UUID.randomUUID()`会返回一个基于时间的UUID,这是最常用的类型。然而,如果要根据IP地址或其他自定义信息生成UUID,...
java 生成8位UUID,解决UUID2太长的问题,欢迎下载。后续代码,陆续放出
java 获取 UUID 与 UUID 校验详解 Java 获取 UUID 是一个非常常见的操作,UUID(Universally Unique Identifier,全球唯一标识符)是一种软件建筑中用于标识信息的标识符。UUID 的主要用途是为了在分布式系统中生成...
### Java 中将 UUID 存储为 Base64 字符串 #### 一、引言 在软件开发领域,尤其是在处理大规模分布式系统时,UUID(通用唯一标识符)因其全局唯一性而广泛应用于各种场景,例如作为数据库记录的主键、会话标识等。...
java生成唯一索引,Long型,区别uuid
在Java中,虽然标准库提供有`java.util.UUID`类来生成和处理UUID,但其性能并非最优,特别是在大规模生成和解析时。为了提高效率,开发者有时会寻求更高效的解决方案,比如`fast-uuid`。 `fast-uuid`是一个专门为...
在Java编程中,UUID(Universally Unique Identifier)是一种标准的128位的唯一标识符,通常用于生成不可预测的全局唯一ID。然而,标准的UUID由32个16进制数字组成,形式上类似于“123e4567-e89b-12d3-a456-...
UUID生成工具类
日常开发中我们会遇到使用字符串ID,最先行到的就是UUID生成我们的随机字符串,但是UUID也是会出现重复的几率的!所以我们引入的新的ULID ULID的特性 与UUID的128位兼容性 每毫秒1.21e + 24个唯一ULID 按字典顺序...
import java.util.UUID; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget....
uuid生成,可生成16个字符的唯一码。使用方法,见main函数
java生成16位随机数