자바 UUID 생 성
15228 단어 자바
다음은 UUID 를 구체 적 으로 생 성 하 는 예 입 니 다.
package test;
import java.util.UUID;
public class UUIDGenerator {
public UUIDGenerator() {
}
public static String getUUID() {
UUID uuid = UUID.randomUUID();
String str = uuid.toString();
// "-"
String temp = str.substring(0, 8) + str.substring(9, 13) + str.substring(14, 18) + str.substring(19, 23) + str.substring(24);
return str+","+temp;
}
// UUID
public static String[] getUUID(int number) {
if (number < 1) {
return null;
}
String[] ss = new String[number];
for (int i = 0; i < number; i++) {
ss[i] = getUUID();
}
return ss;
}
public static void main(String[] args) {
String[] ss = getUUID(10);
for (int i = 0; i < ss.length; i++) {
System.out.println("ss["+i+"]====="+ss[i]);
}
}
}
결과:
[java]
view plain copy
ss[0]=====4cdbc040-657a-4847-b266-7e31d9e2c3d9,4cdbc040657a4847b2667e31d9e2c3d9
ss[2]=====6d513b6a-69bd-4f79-b94c-d65fc841ea95,6d513b6a69bd4f79b94cd65fc841ea95
ss[4]=====5709f0ba-31e3-42bd-a28d-03485b257c94,5709f0ba31e342bda28d03485b257c94
ss[6]=====4bf07297-65b2-45ca-b905-6fc6f2f39158,4bf0729765b245cab9056fc6f2f39158
ss[8]=====245accec-3c12-4642-967f-e476cef558c4,245accec3c124642967fe476cef558c4
UUID 는 한 기계 에서 생 성 된 숫자 로, 같은 공중 에 있 는 모든 기계 에 유일 하 다 는 것 을 보증 하 는 것 을 알 수 있다.보통 플랫폼 에 서 는 생 성 된 API 를 제공 합 니 다.오픈 소프트웨어 재단 (OSF) 이 제정 한 표준 에 따라 계산 하면 이 더 넷 카드 주소, 나 초 급 시간, 칩 ID 코드 와 가능 한 많은 숫자 를 사용 했다.
UUID 는 다음 과 같은 몇 가지 부분 을 조합 합 니 다.
(1) 현재 날짜 와 시간, UUID 의 첫 번 째 부분 은 시간 과 관련 이 있 습 니 다. UUID 를 생 성 한 후 몇 초 후에 UUID 를 생 성 하면 첫 번 째 부분 이 다 르 고 나머지 는 같 습 니 다.
(2) 시계 시퀀스
(3) 전역 에서 유일한 IEEE 기기 식별 번 호 는 네트워크 카드 가 있 으 면 네트워크 카드 MAC 주소 에서 얻 을 수 있 고 다른 방식 으로 얻 을 수 있 는 네트워크 카드 가 없다.
UUID 의 유일한 결함 은 생 성 된 결과 열 이 비교적 길 다 는 것 이다.UUID 라 는 표준 에 대해 가장 보편적으로 사용 되 는 것 은 마이크로소프트 의 GUID (Globals Unique Identifiers) 다.ColdFusion 에 서 는 CreateUUID () 함수 로 UUID 를 간단하게 생 성 할 수 있 습 니 다. 그 형식 은 xxxxxxxx - xxxx - xxxxxxxxxxxxxxxxxxxxxx (8 - 4 - 4 - 16) 이 고 그 중에서 각 x 는 0 - 9 또는 a - f 범위 내의 16 진법 의 숫자 입 니 다.표준 UUID 형식 은 xxxxxxxx - xxxx - xxxxxxx - xxxxxxxxxxxxxxxx (8 - 4 - 4 - 12) 로 cflib 에서 CreateGUID () UDF 를 다운로드 하여 변환 할 수 있 습 니 다.
UUID 를 사용 하 는 장점 은 분포 식 소프트웨어 시스템 (예 를 들 어 DCE / RPC, COM +, CORBA) 에서 나타 날 수 있다. 이 는 각 노드 가 생 성 한 표지 가 중복 되 지 않 고 WEB 서비스 등 통합 기술 의 발전 에 따라 UUID 의 장점 이 더욱 뚜렷 해 질 것 이다.사용 하 는 특정 메커니즘 에 따라 UUID 는 서로 다 를 뿐만 아니 라 적어도 서기 3400 년 전에 다른 생 성 된 통용 되 는 유일한 식별 자 와 큰 차이 가 있다 는 것 을 보증 해 야 한다.
통용 되 는 유일한 식별 자 는 대부분의 가능 한 물 체 를 가리 키 는 데 도 쓸 수 있다.마이크로소프트 와 다른 일부 소프트웨어 회사 들 은 전 세계 에서 유일한 식별 자 (GUID) 를 사용 하 는 경향 이 있다. 이것 은 유 니 버 설 유일한 식별 자 유형 으로 구성 대상 모듈 대상 과 다른 소프트웨어 구성 요 소 를 가리 킬 수 있다.첫 번 째 통용 되 는 유일한 식별 자 는 네트워크 컴퓨터 시스템 (NCS) 에서 만 들 어 졌 고 그 다음 에 오픈 소프트웨어 재단 (OSF) 의 분포 식 컴 퓨 팅 환경 (DCE) 의 구성 요소 가 되 었 다.
package com.cib.cap4j.cfn.util;
import java.net.InetAddress;
import java.security.SecureRandom;
/**
* UUID , UUID
*/
public class UUIDGenerator {
private static SecureRandom SEEDER_STATIC = null;
private static byte[] ADDRESS = null;
private static String MID_VALUE_STATIC = null;
private String midValue = null;
private SecureRandom seeder = null;
static {
try {
ADDRESS = InetAddress.getLocalHost().getAddress();
StringBuffer buffer = new StringBuffer(8);
buffer.append(toHex(toInt(ADDRESS), 8));
MID_VALUE_STATIC = buffer.toString();
SEEDER_STATIC = new SecureRandom();
SEEDER_STATIC.nextInt();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public UUIDGenerator() {
StringBuffer buffer = new StringBuffer(16);
buffer.append(MID_VALUE_STATIC);
buffer.append(toHex(System.identityHashCode(this), 8));
midValue = buffer.toString();
seeder = new SecureRandom();
seeder.nextInt();
}
/**
* 32 String
*
* @param obj
*
* @return
*/
public static String generate(Object obj) {
StringBuffer uid = new StringBuffer(32);
// get the system time
long currentTimeMillis = System.currentTimeMillis();
uid.append(toHex((int) (currentTimeMillis & -1L), 8));
// get the internet address
uid.append(MID_VALUE_STATIC);
// get the object hash value
uid.append(toHex(System.identityHashCode(obj), 8));
// get the random number
uid.append(toHex(getRandom(), 8));
return uid.toString();
}
/**
* 32 String
*/
public String generate() {
StringBuffer uid = new StringBuffer(32);
// get the system time
long currentTimeMillis = System.currentTimeMillis();
uid.append(toHex((int) (currentTimeMillis & -1L), 8));
// get the internet address
uid.append(midValue);
// get the random number
uid.append(toHex(seeder.nextInt(), 8));
return uid.toString();
}
private static String toHex(int value, int length) {
char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
StringBuffer buffer = new StringBuffer(length);
int shift = length - 1 << 2;
for (int i = -1; ++i < length;) {
buffer.append(hexDigits[value >> shift & 0xf]);
value <<= 4;
}
return buffer.toString();
}
private static int toInt(byte[] bytes) {
int value = 0;
for (int i = -1; ++i < bytes.length;) {
value <<= 8;
value |= bytes[i];
}
return value;
}
private static synchronized int getRandom() {
return SEEDER_STATIC.nextInt();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.