热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javauuid32_Java生成32位UUID

importjava.net.InetAddress;publicclassUUIDGenerator{***产生一个32位的UUID**return*publicstaticSt

import java.net.InetAddress;

public class UUIDGenerator {

/**

* 产生一个32位的UUID

*

* @return

*/

public static String generate() {

return new StringBuilder(32).append(format(getIP())).append(

format(getJVM())).append(format(getHiTime())).append(

format(getLoTime())).append(format(getCount())).toString();

}

private static final int IP;

static {

int ipadd;

try {

ipadd = toInt(InetAddress.getLocalHost().getAddress());

} catch (Exception e) {

ipadd = 0;

}

IP = ipadd;

}

private static short counter = (short) 0;

private static final int JVM = (int) (System.currentTimeMillis() >>> 8);

private final static String format(int intval) {

String formatted = Integer.toHexString(intval);

StringBuilder buf = new StringBuilder("00000000");

buf.replace(8 - formatted.length(), 8, formatted);

return buf.toString();

}

private final static String format(short shortval) {

String formatted = Integer.toHexString(shortval);

StringBuilder buf = new StringBuilder("0000");

buf.replace(4 - formatted.length(), 4, formatted);

return buf.toString();

}

private final static int getJVM() {

return JVM;

}

private final static short getCount() {

synchronized (UUIDGenerator.class) {

if (counter <0)

counter = 0;

return counter++;

}

}

/**

* Unique in a local network

*/

private final static int getIP() {

return IP;

}

/**

* Unique down to millisecond

*/

private final static short getHiTime() {

return (short) (System.currentTimeMillis() >>> 32);

}

private final static int getLoTime() {

return (int) System.currentTimeMillis();

}

private final static int toInt(byte[] bytes) {

int result = 0;

for (int i = 0; i <4; i++) {

result = (result <<8) - Byte.MIN_VALUE + (int) bytes[i];

}

return result;

}

}

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2010-04-28 13:45

浏览 20343

评论

1 楼

sdh5724

2010-05-02

private static final int IP;

static {

int ipadd;

try {

ipadd = toInt(InetAddress.getLocalHost().getAddress());

} catch (Exception e) {

ipadd = 0;

}

IP = ipadd;

}

这个算法, 最危害的一个地方, 所以你要做个检查, 如果你获得了127.0.0.1, 就很尴尬了。  这就是为什么很多UUID算法, 不这么搞的原因。

private final static short getHiTime() {

return (short) (System.currentTimeMillis() >>> 32);

}

private final static int getLoTime() {

return (int) System.currentTimeMillis();

}

这么做也是不合适的, 一般来说, 需要使用时间来生成安全随机数。 在高并发下, UUID也会一样的。



推荐阅读
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • Java 11相对于Java 8,OptaPlanner性能提升有多大?
    本文通过基准测试比较了Java 11和Java 8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java 11相对于Java 8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
  • 2018深入java目标计划及学习内容
    本文介绍了作者在2018年的深入java目标计划,包括学习计划和工作中要用到的内容。作者计划学习的内容包括kafka、zookeeper、hbase、hdoop、spark、elasticsearch、solr、spring cloud、mysql、mybatis等。其中,作者对jvm的学习有一定了解,并计划通读《jvm》一书。此外,作者还提到了《HotSpot实战》和《高性能MySQL》等书籍。 ... [详细]
author-avatar
Dr_H-鄧
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有