从二00七年六月四日起,停止对雪湖小札新浪博客的维护。雪湖小札已经搬家到速度更为好的百度博客。
如有连接到本博客的请做相应修改。谢谢!
新博客地址为 http://hi.baidu.com/jingleq
对于正则表达式的使用效率问题,我在网上看到的有两种截然不同的结果,到底它的效率如何,今天我用java来做了个则试。
解决的问题很简单,从一个字符串中把用正则表达式如href='[^\']*'的字符串保存到一个list中去。先构造一个长字符串,再进行匹配操作。
测试代码如下:
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Reg {
public String content = '';
public List userRegList = new
LinkedList();
public List userCommonList = new LinkedList();
public List userOneToOneList = new LinkedList();
//传入的参数为构造的字符串长度
public void initContent(int count)
{
//选用StringBuffer,可以选用String一试,
asm文档阅读已快到尾声,最后一章已到Tree API的使用,Tree
API就是针对Class,Method,Field等其它同级的属性进行了一个类包装,可以让我们用面向对像的形式来操作字节码,但也不要负于太高的期望,要操作字节码还真得弄懂了才能下手,Tree
API带给我们的只是代码量的减少。Tree
API是通过实现ClassVisitor接口而实现的,从另外一个角度来说就是给我们又封装了一层ClassVisitor,让我们开发便利点。
同样,我们可以用它来实现AOP。
ClassWriter cw = new
ClassWriter(0);
ClassNode classNode = new ClassNode();
classNode.fields.add(new FieldNode(ACC_PUBLIC, 'count', 'I',
null,
new Integer(0)));
ClassReader cr = new ClassReader('com.c2.asm.B');
//注意classReader.accept的位置,必须为在填充了Node信息之前,如之后就得不到本来类中的信息。
cr.accept(classNode, 0);
List methods = classNode.methods;
for (MethodNode mn : (List<MethodNode>)
metho
Visitor访问者模式作用于某个对象的操作,它可以使你在不改变这些对象本身的情况下,定义作用于这些对象的新操作。
在asm中,ClassReader对象可以接受一个实现ClassVisitor接口的对象来进行对读入的Class的访问与控制。
其中,如asm文档展示了一个很简单的ClassPrinter类,用来打印类相关信息。
ClassPrinter cp = new
ClassPrinter();
ClassReader cr = new
ClassReader('java.lang.Runnable');
cr.accept(cp, 0);
ClassPrinter实现了ClassVisitor接口
public class ClassPrinter
implements ClassVisitor {
public void visit(int version, int access, String name,
String signature,
String superName, String[] interfaces) {
System.out.println(name + ' extends ' + superName + '
{');
}
public void visit
想通过asm的代码生成来写.class文件至少得了解下面的东西。
1.ICONST_x相当于常量,前面的I是指int型,还有其它型的CONST,这个量为比如ICONST_1就是指1,对于后面不同的操作,它会再指定实际的类型。使用visitInsn(ICONST_1)就是说定义了一个为1的临时量压到栈里面,但不会定义一个变量。-1<=ICONST<=5;如果要定义大点的数就使用visitVarInsn(BIPUSH,
10)
2.ISTORE是把栈顶的临时量保存成变量如visitVarInsn(ISTORE,
1)保存在位置1,如果想把变量值拿出来用如下进行,把位置1的值拿出来放到栈顶visitVarInsn(ILOAD, 1);
3.visitIincInsn(1,
1);对位置是1的变量进行自增,自增幅度为后面参数所定义的1。
4.对于栈的操作还有DUP,POP,SWAP等命令。需要理解栈的存取。
5.for循环例子代码,使用了两个label来完成,开始初学对字节码不明白,所以先从.class文件反译成字节码来进行。相当于实现:
----------
什么是asm呢?asm是assembly的缩写,是汇编的称号,对于java而言,asm就是字节码级别的编程。
而这里说到的asm是指objectweb
asm,一种.class的代码生成器的开源项目。ASM是一套java字节码生成架构,它可以动态生成二进制格式的stub类或其它代理类,或者在类被java虚拟机装入内存之前,动态修改类。现在挺多流行的框架都使用到了asm.所以从aop追溯来到了这。
想学习asm,不了解字节码是不行的,特别想开发高效的程序。
其中3.0版提供了一个HelloWorld的例子。刚下下来看,稍改动变出错,自己水平太弱了。
现在还好看懂了不少。真的只是helloWorld,实现的只是打印出helloworld的功能。我做了改动,把println去掉了,使程序更易懂。
// 使用ClassWriter来构建
ClassWriter cw = new ClassWriter(0);
// 首先当然先得给出类的信息,参数分别为
.class版
从aop到cglib到asm跟着发现了Jasml工具,一个挺好玩的东西,可以把.class文件反编译在一种类似字节码,但比字节码好看的jasm代码。只要认识字节码便能在jasm代码中做更改,之后又通过Jasml工具编译成.class文件。
不用小颖照样改程序,但要看你字节码功力了``提供另类代码修改。
Jasml做的文档挺好,虽然只是英文版,一看就懂。其实也不是文档的功能,是Jasml设计得太方便了。
谁用Jasml呢?
如文档所说有三种人:A.研究java语言底层理论的人;B.那些想优化代码的或者想没有源码又想深入.class实现的人;C.只有.class文件想改代码的人。
有小颖,为嘛有B,C两种人呢?我还是做A吧,呵呵``
auth by :csnowfox
当java应用程序启动的时候,它还没有安全管理器,但是,应用程序通过将一个指向java.lang.SecurityManager或是其子类的实例给setSecurityManger(),以此来安装安全管理器,这个动作是可选的。
在java1.2版本以前java.lang.SecurityManager是一个抽象类,而在1.2中的类java.lang.SecurityManager是一个具体的类。
在现阶段,我们使用较多的是SecurityManager中的checkPermission(java.java.security.Permission)方法。其中java自带的常用的Permissin有如下:SocketPermission(网络),PropertyPermission(属性),FilePermission(文件操作),举例使用FilePermission:
我想限定只有在/temp/目录下有写操作
1.首先修改%JRE_HOME%/lib/security/java.policy文件,在grant{}里面添加资源
permission java.io.FilePermission '/temp/*',
'write,read';
2.在程序里面可以这样来检查是否具有该文件的写操作权:
SecurityManager sm = new
SecurityManager();
System.setS
以前生成对密钥总看文档啊,敲啊敲啊,都快累死了。后来发现了,用.bat这样的批处理特别爽。都测试用的,里面的东西写死就够了,呵呵。
生成密钥脚本:
@echo off
echo 通过别名和密码创建私密钥到keystore
keytool -genkey -alias ws_security -keypass keypassword -keystore
privatestore.jks -storepass keyStorePassword -dname
'cn=ws_security' -keyalg RSA
echo 证书
keytool -selfcert -alias ws_security -keystore privatestore.jks
-storepass keyStorePassword -keypass keypassword
echo 导出公钥到key.rsa
keytool -export -alias ws_security -file key.rsa -keystore
privatestore.jks -storepass keyStorePassword
echo 导入公钥到新的keystore中
keytool -import -alias ws_security -file key.rsa -keystore
publicstore.jks -storepass keyStorePassword
echo 过程完成!
echo .&pause
在公司发现一段代码用来清理系统的,简单但
一直都觉得,拍花比拍人简单~~ 喜欢花 ~`照片中的花真的很容易就比真实的漂亮~`

出来的效果有层次,我喜欢~~

构图简单点,颜色我喜欢 ~~
她喜欢,我也喜欢~~