jdk1.4如何使用UUID类
来源:互联网 发布:java http连接池 编辑:程序博客网 时间:2024/04/28 22:45
现在用jdk1.5以下的人很少了,但是很多线上的东西是不能改的 这个类就是jdk1.4用的uuid
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;
/**
* @author quansheng
* @version 创建时间:2009-12-31 下午03:52:18 类说明
* jdk1.4无法使用java.util.UUID类
*/
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测试:" + UUID.randomUUID());
String s = UUID.randomUUID().toString();
// 去掉“-”符号
s = s.substring(0, 8) + s.substring(9, 13) + s.substring(14, 18)
+ s.substring(19, 23) + s.substring(24);
System.out.println("生成去掉-符号的UUID测试:" + s);
/*
* //生成10万个UUID List list = new ArrayList(); String uid = ""; for (int i =
* 0; i < 100000; i++) { uid = UUID.randomUUID().toString();
* list.add(uid); } System.out.println("生成10万个UUID"+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);
}
}
调用方法
String uuid = UUID.randomUUID().toString();
- jdk1.4如何使用UUID类
- jdk1.4如何使用UUID类
- jdk1.4版本没有 java.lang.UUID
- jdk1.4如何使用RSA算法
- WSAD 如何修改JDK以使用jdk1.4
- UUID使用
- 如何使用java自动生成数据表id,java.util.UUID类
- 使用 sqlalchemy 时如何配置使用 postgresql 的 uuid 类型
- 关于UUID和GUID,教你如何使用JDK自带的UUID生成主键。
- Linux系统,使用C语言如何产生UUID
- Solr4.0 如何配置使用UUID自动生成id值
- Solr4.0 如何配置使用UUID自动生成id值
- Solr4.40 如何配置使用UUID自动生成id值
- Solr4.0 如何配置使用UUID自动生成id值
- solr5.3 如何配置使用UUID解决id覆盖问题
- 使用JDK1.4开发Struts2
- Ubuntu如何查看uuid
- ABAP如何生成UUID
- 【C#笔记】关于 Random类
- 好好睡一觉
- 框架frameset/frame
- java
- 系统程序员成长计划-组合的威力(二)
- jdk1.4如何使用UUID类
- ResultSet深入分析
- 使用虚拟机的好处
- BEC、博思、托业、雅思、托福全面大比拼
- C++露点了
- java学习历程(转)
- 2009的最后一天
- Struts2 submit 标签自动换行。。
- Intel EE的IQ测试题