avatar1 avatar
@{[{user.name}]}
希腊·圣域
since February 1500

使用过iReport做过报表或者各种report的同学都知道,iReport对中文的支持非常差,可以说不经过任何配置的话是不支持中文的。因为iReport是基于iText生产PDF的,所以最简单的做法是导入iTextAsian包来解决中文文问题,但是这个包只支持宋体,在现在支持clearType的中文字体那么多,比如微软雅黑,如果可以随意更换自己喜好的字体就完美了。经过Kido的不断测试,终于找到一个简单可行的随意更换字体的办法。

  • 创建一个font文件夹,这个文件夹的位置可以不需要在工程目录下,比如可以在C盘下创建一个 C:/font, 如果是Mac则可以创建于当前用户目录下,比如:~/font

  • 添加刚刚创建的文件夹到你的iReport中的classpath中,如图

  • 下载你想要添加的中文字体,注意,iReport只支持.ttf格式的字体,下载时请留意,字体一般有两个文件,一个对应普通字体另一个粗体。

  • 将下载好的字体保存到font文件夹,注意:不要包含子目录,直接将字体文件拷贝到font根目录。

  • 安装字体到iReport,如下图



  • 完成上述几步就可以在iReport中使用中文字体了,使用时跟iReport中默认的英文字体一样,不需要设置任何地方可直接使用,PDF font name, embeded等等统统不要设置。

  • 如果你想在Java中调用iReport动态生成PDF报告,那么你还需要将刚刚添加到iReport的字体打包成jar并添加到Java工程的classpath中,具体打包方法如图:

Kido成功用以上方法随意的切换了中文字体,总结一记录一下吧,有需要的同学也可以参考一下。

到底什么是HASH和HASH算法? 25 October 2016 00:00:29

讲到 哈希(HASH) 就必然会讲到 哈希算法哈希值

做程序的难免会经常听到看到HASH,印象中只知道HASH运算就是把一串字符转换成一种不重复的字符串,不论是文件,数字,字符串等等都可以进行哈希运算而得到一个唯一的哈希值。当然这样理解是有恰当或者不对的。

它们之间的关系非常简单

一段任意长度的数据 -> 哈希算法 -> 哈希值

哈希算法并不是一个特定的算法,而是一类算法的统称。常见的哈希算法实现有MD5SHA

哈希算法的定义

哈希算法也叫做散列算法,一般来说只要一个算法满足关系:f(data)=value, 输入任意长度的data数据,经过该算法运算后输出一个定长的数据value,同时这个过程是不可逆的,即无法由value推导出data,该算法就可以称作为一个哈希算法。如果对一组数据集做哈希处理,将得到的结果与原始数据集做一一映射后就可以得到一个哈希表。

哈希的两个重要性质

基于哈希的定义而已归纳总结为: 不可逆无冲突

关于哈希值的“重复”

哈希的性质之一为无冲突, 但根据哈希算法的定义,...运算后会输出一个定长的数据..., 即一个哈希算法的值域是有限的,然而输入的原始数据可以是任意长度任何的组合,即原始数据是无穷的,那么这样“重复”是不可以避免的,也就是说有可能两个不同的输入会得到相同的哈希值。那么这样就违背了我们的无冲突的性质,其实冲突是不可避免的,业界内称作 碰撞(Collision),所以这里的无冲突其实是指明:一个好的成熟的哈希算法会有较好的抗冲突性

安全性

总之,如果两个相同的原始输入数据,在同一个哈希算法下一定会得到相同的哈希值,但是哈希值相同的两个原始输入数据不一定相同,即 不可逆

一个简单的哈希算法的例子

以前看过一个简单的例子,讲的是如果你存储了很多歌曲,但是当你要添加新的歌曲的时候为了节省资源要检测一下是否已经存在了,但是同样的歌可以命名不一样的歌曲名字,为了避免这样的事情发生,我们通过计算(哈希算法)获得歌曲的大小(哈希值),通过与新歌的大小对比从而区分出是否该歌曲已经存在。当然不严格的讲计算文件大小的过程也可以称作一个哈希算法,只是这个哈希算法非常脆弱罢了。

总的来说

f(data) = value, 不可逆,抗冲突

之前有一次启动tocmat之后无法访问页面,并且也没有任何错误信息输出,但奇怪的发现有些启动日志并没打印完全,后来等了5分钟左右的时候日志就全部打印完了,tomcat也变得可以访问了,但是足足等了5分钟。

出现这个问题的原因是Tomcat 版本非常依赖于SecureRandom这个类去生成随机的串用作seesion ids等等,而SecureRandom依赖于熵(entropy)的输入。

熵(entropy)是描述系统混乱无序程度的物理量

如果系统熵过低,tomcat启动过程中(加密程序)就会等待系统产生足够的熵才进行一下一步启动从而导致启动过程变慢。

所以解决方案就是指定一个非空的熵(entropy)给SeureRandom。

方案1:

-Djava.security.egd=file:/dev/./urandom

方案2 (推荐):

apt-get install haveged  

Haveged 的目的是提供一个简单易用的不可预测随机数生成器,基于 HAVEGE 算法。Haveged 可以解决在某些情况下,系统熵过低的问题。

使用下面命令查看当前系统收集到的熵,如果低于1000那么说明系统的熵比较底,那么最好能够安装haveged

cat /proc/sys/kernel/random/entropy_avail

当前第 1页,一共 1页