加载中…
个人资料
樂樂
樂樂
  • 博客等级:
  • 博客积分:0
  • 博客访问:29,040
  • 关注人气:3
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
留言
加载中…
评论
加载中…
好友
加载中…
博文
(2007-06-04 21:01)
从二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一试,

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
(2007-05-31 14:09)
分类: 技术档案

  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,不了解字节码是不行的,特别想开发高效的程序。
  到asm的官方网站下载asm发布版,http://asm.objectweb.org/
  其中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吧,呵呵``
  Jasml官方主页:http://jasml.sourceforge.net/
 
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
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
(2007-05-15 15:25)
  以前生成对密钥总看文档啊,敲啊敲啊,都快累死了。后来发现了,用.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
 
  在公司发现一段代码用来清理系统的,简单但
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
(2007-05-07 01:10)
 一直都觉得,拍花比拍人简单~~ 喜欢花 ~`照片中的花真的很容易就比真实的漂亮~`

出来的效果有层次,我喜欢~~
构图简单点,颜色我喜欢 ~~

 她喜欢,我也喜欢~~
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
  

新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

新浪公司 版权所有