- 浏览: 264864 次
- 性别:
- 来自: 南宁
文章分类
- 全部博客 (249)
- Memcached (6)
- 操作系统-Linux (18)
- 操作系统-Windows (2)
- JAVA-多线程 (6)
- Java-Web (46)
- Eclipse (19)
- Struts-Spring-Hibernate (25)
- 消息队列 (10)
- JBPM (3)
- 全文检索-Solr (2)
- WebService (3)
- 数据库-Oracle (9)
- 数据库-MySQL (14)
- 数据库-MS SQL (2)
- ESB(企业服务总线) (1)
- 前端技术 (9)
- 互联网安全技术 (1)
- 日志log4j (3)
- 分布式框架 (11)
- 版本控制-SVN (3)
- 版本控制-Git (5)
- Maven (11)
- 大数据-Hadoop (3)
- PHP (1)
- JAVA注解 (2)
- 系统架构 (1)
- 会话-权限-JWT (10)
- 定时任务 (1)
- 非技术 (1)
- Redis (5)
- Nginx (5)
- 云计算和虚拟化 (1)
- swagger (1)
- 移动端UI和框架 (5)
最新评论
-
lgh1992314:
applicationContext.xml 是 spring ...
Spring的applicationContext和spring-mvc.xml的区别
Hibernate主键生成方式 Key Generator
主键产生器
可选项说明:
1) assigned
主键由外部程序负责生成,无需Hibernate参与。
2) hilo
通过hi/lo 算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态。
3) seqhilo
与hilo 类似,通过hi/lo 算法实现的主键生成机制,只是主键历史状态保存在Sequence中,适用于支持Sequence的数据库,如Oracle。
4) increment
主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候
将此值加1作为主键。
这种方式可能产生的问题是:如果当前有多个实例访问同一个数据库,那么由于各个实例各自维护主键状态,不同实例可能生成同样的主键,从而造成主键重复异常。因此,如果同一数据库有多个实例访问,此方式必须避免使用。
5) identity
采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL中的主键生成机制。
6) sequence
采用数据库提供的sequence 机制生成主键。如Oralce 中的Sequence。
7) native
由Hibernate根据底层数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式。
8) uuid.hex
由Hibernate基于128 位唯一值产生算法生成16 进制数值(编码后以长度32 的字符串表示)作为主键。
9) uuid.string
与uuid.hex 类似,只是生成的主键未进行编码(长度16)。在某些数据库中可能出现问题(如PostgreSQL)。
10) foreign
使用外部表的字段作为主键。
一般而言,利用uuid.hex方式生成主键将提供最好的性能和数据库平台适应性。
另外由于常用的数据库,如Oracle、DB2、SQLServer、MySql 等,都提供了易用的主键生成机制(Auto-Increase 字段或者Sequence)。我们可以在数据库提供的主键生成机制上,采用generator-class=native的主键生成方式。不过值得注意的是,一些数据库提供的主键生成机制在效率上未必最佳,大量并发insert数据时可能会引起表之间的互锁。
数据库提供的主键生成机制,往往是通过在一个内部表中保存当前主键状态(如对于自增型主键而言,此内部表中就维护着当前的最大值和递增量),之后每次插入数据会读取这个最大值,然后加上递增量作为新记录的主键,之后再把这个新的最大值更新回内部表中,这样,一次Insert操作可能导致数据库内部多次表读写操作,同时伴随的还有数据的加锁解锁操作,这对性能产生了较大影响。
因此,对于并发Insert要求较高的系统,推荐采用uuid.hex 作为主键生成机制。
在Hibernate中主键的生成方式中有一种是 UUID.HEX方式。
它是Hibernate系统自动生成一个32位长的字符串。
具体的使用方法是: 修改hbm.xml 主键的默认的手动生成方式 <generator class="assigned" /> 为<generator class="uuid.hex" />
如下是两个示例:
<id name="userid" type="java.lang.String">
<column name="USERID" length="20" />
<generator class="uuid.hex" />
</id>
<id name="empno" type="java.lang.String">
<column name="EMPNO" length="50"/>
<generator class="uuid.hex" ></generator>
</id>
我试着使用这种方法向数据库中插入了几条记录,得到的主键(32位字符串)如下:
402852432955363a012955363c110001
40285243295535a301295535a6980001
40285243295418b801295418bac60001
40285243295535e801295535ea770001
说到32位字符,我很自然的想到了php中的加密运算算法 md5() 。
下面是一些字符md5加密之后的结果:
a6907acf5b337a322193f19b6698c867 (jia)
d3d9446802a44259755d38e6d163e820 (10)
c02d0450cdd75ce7595f5eaeb5f041a3 (7988)
d603f7ff967282ff491e956b21f10a6c (c02d0450cdd75ce7595f5eaeb5f041a3)
9825f096ee35843407c643a5af383ab0 (d603f7ff967282ff491e956b21f10a6c)
如下是php中测试的代码:
echo "jia"." ========== ".md5(jia)."<br>";
echo "jia"." ========== ".md5("jia")."<br>";
echo "10"." ========== ".md5("10")."<br>";
echo "10"." ========== ".md5(10)."<br>";
echo "7988"." ========== ".md5(7988)."<br>";
echo "c02d0450cdd75ce7595f5eaeb5f041a3"." ==========
".md5(c02d0450cdd75ce7595f5eaeb5f041a3)."<br>";
echo "d603f7ff967282ff491e956b21f10a6c"." ==========
".md5(d603f7ff967282ff491e956b21f10a6c)."<br>";
UUID.HEX中使用某种算法生成了32位“无意义的”、“原理上不应该重复的字符”。我一直疑心它可能是把一些有序的数字(可以理解为序列)通过md5(或者是类似md5的算法,……应该就是md5,不应该有别的方法了)算法,装换为一些表面上无意义的字符(仔细看一下这些连续插入的主键,他们还是有些规律,至少前面几位还是相同的)。但这些字符作为主键来使用一定是不重复的(这是由数据库中主键的特征决定的)。一些表面上看起来是无意义的字符,同时还要确保他们的唯一性,目前谁能做到这一点?我想也只有md5了…………
查了一下资料: 在Java中是提供了加密算法的
MessageDigest md = MessageDigest.getInstance("MD5");
但是Java中的md5加密要自己去实现一些方法,对于同一个字符在Java中加密后的结果和在php中md5() 加密后的结果是不同的……
c02d0450cdd75ce7595f5eaeb5f041a3 (7988) php md5()
2d0450cdd75ce7595f5eaeb5f041a3 (7988)
/*
java.security
类 MessageDigest
java.lang.Object
java.security.MessageDigestSpi
java.security.MessageDigest
*/
//package com.tsinghua;
import java.security.*;
public class MD5Tool {
// 主方法
public static void main(String []args){
String test="7988";
//创建一个MD5Tool类
MD5Tool myMd5 =new MD5Tool();
// 调用 MD5Encrypt(String inStr) 方法
String result=myMd5.MD5Encrypt(test);
// 打印结果
System.out.println (test+" 加密後的结果是:"+result);
}
//该方法将你输入的字符串,通过md5加密,返回一个加密後的字符串
public static String MD5Encrypt(String inStr) {
MessageDigest md = null;
String outStr = null;
try {
md = MessageDigest.getInstance("MD5"); //可以选中其他的算法如SHA
byte[] digest = md.digest(inStr.getBytes());
//返回的是byet[],要转化为String存储比较方便
// 调用 bytetoString(byte 方法,返回一个输出结果
outStr = bytetoString(digest);
}
catch (NoSuchAlgorithmException nsae) {
nsae.printStackTrace();
}
return outStr;
}
//
public static String bytetoString(byte[] digest) {
String str = "";
String tempStr = "";
for (int i = 1; i < digest.length; i++) {
tempStr = (Integer.toHexString(digest[i] & 0xff));
if (tempStr.length() == 1) {
str = str + "0" + tempStr;
}
else {
str = str + tempStr;
}
}
return str.toLowerCase();
}
}
所有的<generator>的Class都是从net.sf.hibernate.id.IdentifierGenerator接口实现得到的,Class属性表示该generator是由哪种方式来生成的。生成方式包括:
increment:生成long, short或者int类型的主键,不能在cluster环境下使用。适用于所有数据库
identity:生成long, short或者int类型的主键。适用于DB2, MySQL, MS SQL Server, Sybase and HypersonicSQL
sequence :生成long, short或者int类型的主键。适用于DB2, PostgreSQL, Oracle, SAP DB, McKoi,Interbase.
hilo:生成long, short或者int类型的主键。需要提供一个数据库的表来存放生成的主键信息。当采用应用服务器的JTA提供的数据库连接或者用户自定义的数据库连接的时候,不要使用这种主键生成方式。适用于所有数据库
seqhilo:采用给定的数据库的sequence来生成long, short或者int类型的主键。适用于DB2, PostgreSQL, Oracle, SAP DB, McKoi,Interbase.
uuid.hex:采用128位的算法来生成一个32位字符串。最通用的一种方式。适用于所有数据库
uuid.string:同样采用128位的UUID算法。将生成的字符编码位16位。适用于除PostgreSQL.以外的数据库
native:根据具体连接的数据库从identity, sequence或者hilo选择一种来生成主键。适用的数据库根据选择的生成方式确定。
assigned: 交给应用自己给主键赋值。要注意的是赋值必须在调用save()方法之前完成。适用的数据库根据选择的生成方式确定。
主键产生器
可选项说明:
1) assigned
主键由外部程序负责生成,无需Hibernate参与。
2) hilo
通过hi/lo 算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态。
3) seqhilo
与hilo 类似,通过hi/lo 算法实现的主键生成机制,只是主键历史状态保存在Sequence中,适用于支持Sequence的数据库,如Oracle。
4) increment
主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候
将此值加1作为主键。
这种方式可能产生的问题是:如果当前有多个实例访问同一个数据库,那么由于各个实例各自维护主键状态,不同实例可能生成同样的主键,从而造成主键重复异常。因此,如果同一数据库有多个实例访问,此方式必须避免使用。
5) identity
采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL中的主键生成机制。
6) sequence
采用数据库提供的sequence 机制生成主键。如Oralce 中的Sequence。
7) native
由Hibernate根据底层数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式。
8) uuid.hex
由Hibernate基于128 位唯一值产生算法生成16 进制数值(编码后以长度32 的字符串表示)作为主键。
9) uuid.string
与uuid.hex 类似,只是生成的主键未进行编码(长度16)。在某些数据库中可能出现问题(如PostgreSQL)。
10) foreign
使用外部表的字段作为主键。
一般而言,利用uuid.hex方式生成主键将提供最好的性能和数据库平台适应性。
另外由于常用的数据库,如Oracle、DB2、SQLServer、MySql 等,都提供了易用的主键生成机制(Auto-Increase 字段或者Sequence)。我们可以在数据库提供的主键生成机制上,采用generator-class=native的主键生成方式。不过值得注意的是,一些数据库提供的主键生成机制在效率上未必最佳,大量并发insert数据时可能会引起表之间的互锁。
数据库提供的主键生成机制,往往是通过在一个内部表中保存当前主键状态(如对于自增型主键而言,此内部表中就维护着当前的最大值和递增量),之后每次插入数据会读取这个最大值,然后加上递增量作为新记录的主键,之后再把这个新的最大值更新回内部表中,这样,一次Insert操作可能导致数据库内部多次表读写操作,同时伴随的还有数据的加锁解锁操作,这对性能产生了较大影响。
因此,对于并发Insert要求较高的系统,推荐采用uuid.hex 作为主键生成机制。
在Hibernate中主键的生成方式中有一种是 UUID.HEX方式。
它是Hibernate系统自动生成一个32位长的字符串。
具体的使用方法是: 修改hbm.xml 主键的默认的手动生成方式 <generator class="assigned" /> 为<generator class="uuid.hex" />
如下是两个示例:
<id name="userid" type="java.lang.String">
<column name="USERID" length="20" />
<generator class="uuid.hex" />
</id>
<id name="empno" type="java.lang.String">
<column name="EMPNO" length="50"/>
<generator class="uuid.hex" ></generator>
</id>
我试着使用这种方法向数据库中插入了几条记录,得到的主键(32位字符串)如下:
402852432955363a012955363c110001
40285243295535a301295535a6980001
40285243295418b801295418bac60001
40285243295535e801295535ea770001
说到32位字符,我很自然的想到了php中的加密运算算法 md5() 。
下面是一些字符md5加密之后的结果:
a6907acf5b337a322193f19b6698c867 (jia)
d3d9446802a44259755d38e6d163e820 (10)
c02d0450cdd75ce7595f5eaeb5f041a3 (7988)
d603f7ff967282ff491e956b21f10a6c (c02d0450cdd75ce7595f5eaeb5f041a3)
9825f096ee35843407c643a5af383ab0 (d603f7ff967282ff491e956b21f10a6c)
如下是php中测试的代码:
echo "jia"." ========== ".md5(jia)."<br>";
echo "jia"." ========== ".md5("jia")."<br>";
echo "10"." ========== ".md5("10")."<br>";
echo "10"." ========== ".md5(10)."<br>";
echo "7988"." ========== ".md5(7988)."<br>";
echo "c02d0450cdd75ce7595f5eaeb5f041a3"." ==========
".md5(c02d0450cdd75ce7595f5eaeb5f041a3)."<br>";
echo "d603f7ff967282ff491e956b21f10a6c"." ==========
".md5(d603f7ff967282ff491e956b21f10a6c)."<br>";
UUID.HEX中使用某种算法生成了32位“无意义的”、“原理上不应该重复的字符”。我一直疑心它可能是把一些有序的数字(可以理解为序列)通过md5(或者是类似md5的算法,……应该就是md5,不应该有别的方法了)算法,装换为一些表面上无意义的字符(仔细看一下这些连续插入的主键,他们还是有些规律,至少前面几位还是相同的)。但这些字符作为主键来使用一定是不重复的(这是由数据库中主键的特征决定的)。一些表面上看起来是无意义的字符,同时还要确保他们的唯一性,目前谁能做到这一点?我想也只有md5了…………
查了一下资料: 在Java中是提供了加密算法的
MessageDigest md = MessageDigest.getInstance("MD5");
但是Java中的md5加密要自己去实现一些方法,对于同一个字符在Java中加密后的结果和在php中md5() 加密后的结果是不同的……
c02d0450cdd75ce7595f5eaeb5f041a3 (7988) php md5()
2d0450cdd75ce7595f5eaeb5f041a3 (7988)
/*
java.security
类 MessageDigest
java.lang.Object
java.security.MessageDigestSpi
java.security.MessageDigest
*/
//package com.tsinghua;
import java.security.*;
public class MD5Tool {
// 主方法
public static void main(String []args){
String test="7988";
//创建一个MD5Tool类
MD5Tool myMd5 =new MD5Tool();
// 调用 MD5Encrypt(String inStr) 方法
String result=myMd5.MD5Encrypt(test);
// 打印结果
System.out.println (test+" 加密後的结果是:"+result);
}
//该方法将你输入的字符串,通过md5加密,返回一个加密後的字符串
public static String MD5Encrypt(String inStr) {
MessageDigest md = null;
String outStr = null;
try {
md = MessageDigest.getInstance("MD5"); //可以选中其他的算法如SHA
byte[] digest = md.digest(inStr.getBytes());
//返回的是byet[],要转化为String存储比较方便
// 调用 bytetoString(byte 方法,返回一个输出结果
outStr = bytetoString(digest);
}
catch (NoSuchAlgorithmException nsae) {
nsae.printStackTrace();
}
return outStr;
}
//
public static String bytetoString(byte[] digest) {
String str = "";
String tempStr = "";
for (int i = 1; i < digest.length; i++) {
tempStr = (Integer.toHexString(digest[i] & 0xff));
if (tempStr.length() == 1) {
str = str + "0" + tempStr;
}
else {
str = str + tempStr;
}
}
return str.toLowerCase();
}
}
所有的<generator>的Class都是从net.sf.hibernate.id.IdentifierGenerator接口实现得到的,Class属性表示该generator是由哪种方式来生成的。生成方式包括:
increment:生成long, short或者int类型的主键,不能在cluster环境下使用。适用于所有数据库
identity:生成long, short或者int类型的主键。适用于DB2, MySQL, MS SQL Server, Sybase and HypersonicSQL
sequence :生成long, short或者int类型的主键。适用于DB2, PostgreSQL, Oracle, SAP DB, McKoi,Interbase.
hilo:生成long, short或者int类型的主键。需要提供一个数据库的表来存放生成的主键信息。当采用应用服务器的JTA提供的数据库连接或者用户自定义的数据库连接的时候,不要使用这种主键生成方式。适用于所有数据库
seqhilo:采用给定的数据库的sequence来生成long, short或者int类型的主键。适用于DB2, PostgreSQL, Oracle, SAP DB, McKoi,Interbase.
uuid.hex:采用128位的算法来生成一个32位字符串。最通用的一种方式。适用于所有数据库
uuid.string:同样采用128位的UUID算法。将生成的字符编码位16位。适用于除PostgreSQL.以外的数据库
native:根据具体连接的数据库从identity, sequence或者hilo选择一种来生成主键。适用的数据库根据选择的生成方式确定。
assigned: 交给应用自己给主键赋值。要注意的是赋值必须在调用save()方法之前完成。适用的数据库根据选择的生成方式确定。
发表评论
-
SpringBoot使用@Value给静态变量注入值
2019-07-15 14:03 677SpringBoot中使用@Value()只能给普通变量注入 ... -
Hibernate @Column、columnDefinition等简介(注意日期类型)
2018-09-18 14:28 950主要包括: @Id、@Gener ... -
@Value("#{}")与@Value("${}")的区别
2018-09-17 13:14 4311 @Value("#{}") Sp ... -
spring boot 整合jsp
2018-07-20 11:34 4241.idea在工程源文件夹src/main/下创建web资源 ... -
Hibernate配置打印sql语句和参数
2018-05-08 16:10 1793在Hibernate的配置文件hibernate.cfg. ... -
使用JPA查询后,设置属性会执行update语句
2017-04-16 16:52 2590做项目时,发现一个问题,一个查询用户的语句,查询结果 ... -
@PathVariable和@RequestParam的区别
2016-10-10 15:43 979请求路径上有个id的变量值,可以通过@PathVariabl ... -
Spring中拦截/和拦截/*的区别以及不拦截资源文件的解决方案
2016-10-10 15:34 975一、我们都知道在基于Spring的Application中 ... -
annotation-driven、DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter
2016-08-06 14:08 849DefaultAnnotationHandlerMa ... -
<context:component-scan>使用说明(转)
2016-08-05 17:40 742在xml配置了这个标签后,spring可以自动去扫描ba ... -
Spring的applicationContext和spring-mvc.xml的区别
2016-08-05 17:16 1454applicationcontext.xml一般里面是配置d ... -
hibernate造成的存取中文乱码问题解决办法
2015-06-11 13:39 584找到此属性: <property name=&qu ... -
Spring事务配置的五种方式
2015-06-05 09:43 470前段时间对Spring的事务配置做了比较深入的研究,在此之间 ... -
Hibernate各种主键生成策略与配置详解
2015-06-05 09:26 6761、assigned 主键由外部程序负责生成,在 s ... -
Spring取得Bean(Spring管理下和非Spring管理下)
2015-06-04 02:21 3156BeanFactory为一个管理bean的工厂(即为spri ... -
Spring配置:用context:property-placeholder替换PropertyPlaceholderConfigurer
2015-06-04 01:59 1729有时候需要从properties文件中加载配置,以前的方 ... -
SpringMVC中的HandlerMapping、ModelAndView、Adapter
2015-06-04 00:31 1777一、原始代码(不用注解的情况) (1)web.xml配置 ... -
springMVC教程-快速入手-深入分析
2015-06-04 00:08 721作者:赵磊 博客:http://elf8848.itey ... -
处理No adapter for handler异常
2015-05-29 18:47 1512出现报错: No adapter for handler ... -
DispatcherServlet详解
2015-05-29 18:44 6263.1、DispatcherServlet作用 Di ...
相关推荐
* 1.native 对于orcale采用Sequence方式,对于MySQL和SQL Server采用identity(处境主键生成机制), * native就是将主键的生成工作将由数据库完成,hibernate不管(很常用) * 例:@GeneratedValue(generator = ...
比如,OrderLine类具有一个主键,这个主键依赖于Order的(联合)主键。 <key-property name="lineId"/> <key-property name="orderId"/> <key-property name="customerId"/> insert="false" ...
配置classpath,将generator/lib中的rapid-generator.jar及其它数据库驱动加入classpath 修改generator.xml的数据库连接属性及其它属性 以application的方式运行GeneratorMain类,要生成不同的table,直接修改代码即可 ...
AUTO 生成器,适用与可移值的应用,多个@Id可以共享同一个 identifier生成器,只要把generator属性设成相同的值就可以。通过@SequenceGenerator 和 @TableGenerator 可以配置不同的 identifier 生成器。 <table-...
自动替换generator.properties中的句号(.)为反斜杠,设置key为key+"_dir"后缀 示例: pkg=com.company => pkg_dir=com/company 九.自动拷贝二进制文件至输出目录 如模板目录下的 zip,rar,doc文件将会自动拷贝至...
Hibernate的检索方式:(查询/加载) 1. 通过OID加载 session.get(Users.class, 1); * 2. 通过HQL/SQL 检索 hibernate query language (面向对象的查询语言) * a) 不再操纵表,它操纵的是持久化类的对象 b) 面向...
触发器实现的主键生成器(Primary keys assigned by triggers) 5.1.5. composite-id 5.1.6. 鉴别器(discriminator) 5.1.7. 版本(version)(可选) 5.1.8. timestamp (可选) 5.1.9. property 5.1.10. 多对一...
触发器实现的主键生成器(Primary keys assigned by triggers) 5.1.5. composite-id 5.1.6. 鉴别器(discriminator) 5.1.7. 版本(version)(可选) 5.1.8. timestamp (optional) 5.1.9. property 5.1.10. 多对一...
触发器实现的主键生成器(Primary keys assigned by triggers) 5.1.5. composite-id 5.1.6. 鉴别器(discriminator) 5.1.7. 版本(version)(可选) 5.1.8. timestamp (可选) 5.1.9. property 5.1.10. 多对...
触发器实现的主键生成器(Primary keys assigned by triggers) 6.1.5. composite-id 6.1.6. 鉴别器(discriminator) 6.1.7. 版本(version)(可选) 6.1.8. timestamp (optional) 6.1.9. property 6.1.10. 多...
触发器实现的主键生成器(Primary keys assigned by triggers) 6.1.5. composite-id 6.1.6. 鉴别器(discriminator) 6.1.7. 版本(version)(可选) 6.1.8. timestamp (optional) 6.1.9. property 6.1.10. 多...
触发器实现的主键生成器(Primary keys assigned by triggers) 6.1.5. composite-id 6.1.6. 鉴别器(discriminator) 6.1.7. 版本(version)(可选) 6.1.8. timestamp (optional) 6.1.9. property 6.1.10. ...
触发器实现的主键生成器(Primary keys assigned by triggers) 5.1.5. composite-id 5.1.6. 鉴别器(discriminator) 5.1.7. 版本(version)(可选) 5.1.8. timestamp (optional) 5.1.9. property 5.1.10. 多对一...
触发器实现的主键生成器(Primary keys assigned by triggers) 6.1.5. composite-id 6.1.6. 鉴别器(discriminator) 6.1.7. 版本(version)(可选) 6.1.8. timestamp (optional) 6.1.9. property 6.1.10. ...
您可以使用Hibernate Middlegen、HIbernate Tools、Hibernate Syhchronizer等工具或手工的方式,编写Hibernate的领域对象和映射文件。其中对应T_FILE表的领域对象Tfile.java为: 代码 1 领域对象Tfile 1. ...
触发器实现的主键生成器(Primary keys assigned by triggers) 5.1.5. composite-id 5.1.6. 鉴别器(discriminator) 5.1.7. 版本(version)(可选) 5.1.8. timestamp (可选) 5.1.9. property 5.1.10. 多对一...
mybatis实战教程mybatis in action之九mybatis 代码生成工具的使用 mybatis SqlSessionDaoSupport的使用附代码下载 转自:http://www.yihaomen.com/article/java/302.htm (读者注:其实这个应该叫做很基础的入门...
{1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{subsection.1.3.1} {1.4}数据类型}{23}{section.1.4} {1.4.1}整数与浮点数}{23}{subsection.1.4.1} {1.4.1.1}浮点数原理}...
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...