- 浏览: 543228 次
- 性别:
- 来自: 广州
-
文章分类
最新评论
-
wenming6688:
垃圾。。。。。。
Java中的this和super[转] -
yingjianxuehun:
gszp852 写道请问下,服务器的字符编码在哪设置,我也遇到 ...
ognl.MethodFailedException: Method "setEndtime" failed for object -
zxjlwt:
有在osgi中用过吗?http://surenpi.com
no security manager: RMI class loader disabled -
samuce:
谢谢,终于找到问题结果!
taglib prefix="s" uri="/struts-tags" -
gszp852:
请问下,服务器的字符编码在哪设置,我也遇到了这个问题。不知道是 ...
ognl.MethodFailedException: Method "setEndtime" failed for object
UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),UUID的唯一缺陷在于生成的结果串会比较长。
在Java中生成UUID主要有以下几种方式:
1. JDK1.5
如果使用的JDK1.5的话,那么生成UUID变成了一件简单的事,以为JDK实现了UUID: java.util.UUID,直接调用即可.
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.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); } }
转自:http://spiritfrog.iteye.com/blog/604048
uuid的代码还没来得及看。。。
发表评论
-
深入探讨Java类型提升的约定[转]
2010-09-30 10:28 968转: http://doc.chinaunix.net ... -
java 条件表达式(即三元操作符)的陷阱[转]
2010-09-30 10:22 8419转: http://apps.hi.baidu.com/s ... -
response的 encodeUrl方法的使用[转]
2010-09-29 11:17 1364转自 :http://edu.codepub.com/2009 ... -
java序列化的作用[转]
2010-09-20 11:31 1172转: http://hi.baidu.com/springwu ... -
java transient简介[转]
2010-09-20 11:22 1422转:http://blog.csdn.net/zxl315 ... -
Collection和Collections的区别[转]
2010-09-17 15:37 1456转: http://hanhongke123.blog.163 ... -
HashMap和HashTable的区别[转]
2010-09-17 15:24 1055转: Hashtable和HashMap类有三个重要的不同 ... -
Java 中Vector、ArrayList和LinkedList 的区别[转]
2010-09-17 14:43 1601转:http://pterodactyl.iteye.com/ ... -
Java中ArrayList和LinkedList区别[转]
2010-09-17 12:01 1112转:http://pengcqu.iteye.com/bl ... -
String 中的split()[转]
2010-09-12 22:38 650转:http://www.iteye.com/topic/32 ... -
Java中的this和super[转]
2010-09-09 16:41 1234转自:http://student.csdn.ne ... -
java继承容易犯的错误[转]
2010-09-09 09:32 1061在网上看见一个关于java ... -
Java内部类与匿名内部类
2010-09-08 15:19 973定义在类中方法之外的内部类分为实例内部类和静态内部 ... -
javap的使用
2010-09-08 14:48 1204javap是jdk自带的一个工具,可以反编译,也可以查看jav ... -
JAVA匿名内部类(from thinking in java 3th)[转]
2010-09-08 14:13 1263简单地说:匿名内部类 ... -
Java内部类
2010-09-05 17:32 1411在一个类内部定义类,这就是嵌套类(nested classes ... -
java 静态块 非静态块
2010-08-22 16:41 1879转自:http://blog.sina.com.cn/s/bl ... -
java static
2010-08-22 16:20 999请先看下面这段程序:public class Hello{ p ... -
JNDI API
2010-08-20 14:40 1078JNDI API由5个包组成: 1、Javax.nami ... -
理解JNDI中 java:comp/env/jdbc/datasource 与 jdbc/datas
2010-08-20 14:34 972http://futureinhands.iteye.com/ ...
相关推荐
在Java编程中,UUID(Universally Unique Identifier)是一种标准的128位的唯一标识符,通常用于生成不可预测的全局唯一ID。然而,标准的UUID由32个16进制数字组成,形式上类似于“123e4567-e89b-12d3-a456-...
java生成唯一索引,Long型,区别uuid
java 获取 UUID 与 UUID 校验详解 Java 获取 UUID 是一个非常常见的操作,UUID(Universally Unique Identifier,全球唯一标识符)是一种软件建筑中用于标识信息的标识符。UUID 的主要用途是为了在分布式系统中生成...
GUID是一个128位长的数字,一般用16进制表示。算法的核心思想是结合机器的网卡、当地时间、一个随即数来生成GUID。从理论上讲,如果一台机器每秒产生10000000个GUID,则可以保证(概率意义上)3240年不重复
### Java 中将 UUID 存储为 Base64 字符串 #### 一、引言 在软件开发领域,尤其是在处理大规模分布式系统时,UUID(通用唯一标识符)因其全局唯一性而广泛应用于各种场景,例如作为数据库记录的主键、会话标识等。...
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 生成8位UUID,解决UUID2太长的问题,欢迎下载。后续代码,陆续放出
require('node-uuid')> uuid.v1()'f033db70-29e8-11e5-9cde-5fb5e520454c'> uuid.v4()'3d694534-6ff4-426d-a4ec-bd4366f368e7'V1 是基于时间生成的 UUID,而V2 是基于随机数生成的。生成的 UUID 的第 13 位表示版本...
在Java中,虽然标准库提供有`java.util.UUID`类来生成和处理UUID,但其性能并非最优,特别是在大规模生成和解析时。为了提高效率,开发者有时会寻求更高效的解决方案,比如`fast-uuid`。 `fast-uuid`是一个专门为...
### JAVA UUID 生成知识点 #### 一、UUID 概述 - **定义**: UUID (Universally Unique Identifier) 即全局唯一标识符,是一种用于在分布式系统中唯一标识信息的方法。 - **长度**: UUID 的标准形式为 128 位(16 ...
在Java中,UUID提供了标准的方法来生成全局唯一的标识符。UUID主要由三部分组成:时间戳、随机数和节点ID,这确保了其在全球范围内的唯一性。 首先,我们来看JDK自带的`java.util.UUID`类。这个类提供了多种生成...
在Java编程中,UUID(Universally Unique Identifier)是一种用于生成全局唯一标识符的标准。一个UUID由32个16进制数字组成,通常分为五段,用短横线分隔,形如`8-4-4-4-12`的36个字符。在32位UUID中,我们实际上是...
UUID生成工具类
生产不重复19位随机数,测试1000000数据没重复
java-uuid-generator-3.1.3.jar 部分开源源代码用到这里面的类。
Java Uuid生成器(JUG) JUG是一组用于处理UUID的Java类:使用任何标准方法生成UUID,有效输出,排序等。 它根据生成UUID(有关更多说明,另请参见) JUG由Tatu Saloranta( )最初于2002年编写,并且经过多年的...
日常开发中我们会遇到使用字符串ID,最先行到的就是UUID生成我们的随机字符串,但是UUID也是会出现重复的几率的!所以我们引入的新的ULID ULID的特性 与UUID的128位兼容性 每毫秒1.21e + 24个唯一ULID 按字典顺序...
### Java中Byte与Char、String之间的转换 #### 一、字节和Unicode Java的核心设计是基于Unicode的,这意味着无论是内部处理还是外部交互,Java都采用Unicode作为字符的基础表示。然而,在实际应用中,文件存储或...
JUG,即Java UUID Generator,是一个开源库,扩展了Java标准库中的UUID功能,提供了更高效、更灵活的UUID生成策略。 在Java中,标准库通过`java.util.UUID`类来生成UUID。这个类提供了多种方法,如`randomUUID()`...