<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    E81086713E446D36F62B2AA2A3502B5EB155

    Java雜家

    雜七雜八。。。一家之言

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      40 Posts :: 1 Stories :: 174 Comments :: 0 Trackbacks

    #

    **
     
    * Demonstrate KMP algorithm in Java
     
    *
     
    *
     
    */
    public class KMP {
        
        
        
    public static int indexOf(String target,String pattern)
        {
            
    int pLen=pattern.length();
            
    int tLen=target.length();
            
            
    //the fail function
            int failFunc[]=new int[pLen];
            
            failFunc[
    0]=-1;
            
            
    //build fail function
            for(int i=1;i<pLen;i++)
            {
                
    int j=failFunc[i-1];
                
    while(pattern.charAt(i)!=pattern.charAt(j+1)&&j>=0)
                {
                    
    //recursion 
                    j=failFunc[j];
                }
                
    if(pattern.charAt(i)==pattern.charAt(j+1))
                {
                    failFunc[i]
    =j+1;
                }
                
    else 
                {
                    failFunc[i]
    =-1;
                }
            }

            
    int pPos=0,tPos=0;
            
            
    while(tPos<tLen&&pPos<pLen)
            {
                
    if(target.charAt(tPos)==pattern.charAt(pPos))
                {
                    
    //match ,then do forward
                    tPos++;
                    pPos
    ++;
                }
                
    else if(pPos==0)
                {
                    
    //target go forward
                    tPos++;
                }
                
    else
                {
                    
    //target postion don't change,pattern go back  
                    pPos=failFunc[pPos-1]+1;
                }
            }
            
            
    if(pPos<pLen)return -1;
            
    else return tPos-pLen;
            
            
            
        }

    }

    posted @ 2007-07-10 18:19 DoubleH 閱讀(536) | 評論 (0)編輯 收藏

    這兩天看了兩個項目,都是用Java編寫的操作系統。
    1)JNode.org
    2)JSysos
    兩者都是可以用Java來寫驅動的。

    前者幾乎全是Java源文件99%以上,少量的匯編語言,沒有C代碼。寫的很是賞心悅目。匯編語言編譯器使用的是Nasm,語法很清晰。
    可惜很容易就沒內存了,據使用懷疑是GC沒有很好的實現。在調用Java方法的時候采用即時編譯成匯編指令,
    這樣性能不會很理想。


    后者是C+java的方式,先把class編譯成匯編代碼,然后一塊鏈接。少量的匯編代碼,內存管理使用CPP.
    這種方式應該性能優于前者。這個系統里面沒有Java虛擬機,操作系統用Java語言寫而已。既利用了Java的優雅語法,又不損失性能,個人更看好這種方式的Java OS

    話說回來,操作系統設計已經好久沒有創新了,使用Java不失為一個好主意。利用Java的天生的安全性,寫出來的操作系統應該不會像現在的操作系統一樣病毒橫生,期待他們的成功!



    posted @ 2007-05-27 15:41 DoubleH 閱讀(1960) | 評論 (2)編輯 收藏

    1)DJGPP v203
    2)Nasm 0.98.39
    3)gcc args:
    gcc -Wall -O -fomit-frame-pointer -nostdinc -fno-builtin

    4)link.ld
    ld -T link.ld
    OUTPUT_FORMAT("binary")
    ENTRY(start)
    phys = 0x00100000;
    SECTIONS
    {
      .text phys : AT(phys) {
        code = .;
        *(.text)
        *(.rodata)
        . = ALIGN(4096);
      }
      .data : AT(phys + (data - code))
      {
        data = .;
        *(.data)
        . = ALIGN(4096);
      }
      .bss : AT(phys + (bss - code))
      {
        bss = .;
        *(.bss)
        . = ALIGN(4096);
      }
      end = .;
    }
    5)Bootable CD
    mkisofs -R -b boot/grub/eltorito.s2 -no-emul-boot     -boot-load-size 4 -boot-info-table -o yovnos.iso iso

    posted @ 2007-05-26 14:25 DoubleH 閱讀(341) | 評論 (0)編輯 收藏

         摘要: 考慮這樣一個使用場景,假如要查看所有進入weblogic上請求的(注意不是訪問某個特定web app的)一些請求頭是否設置,如果沒有設置則返回以定制的頁面.否則正常處理.這么一個簡單的需求在Tomcat下是很容易實現的,但是在weblogic下就比較奢侈了.你可能想到weblogic中:1)weblogic.security.net.ConnectionFilter但是在ConnectionFil...  閱讀全文
    posted @ 2007-04-03 22:48 DoubleH 閱讀(7966) | 評論 (2)編輯 收藏

         摘要: JDK中java.util.Timer類的調度是嚴重依賴系統當前時間的。  閱讀全文
    posted @ 2007-03-17 10:40 DoubleH 閱讀(2185) | 評論 (3)編輯 收藏

         摘要: 支持Native Splash Screen了!  閱讀全文
    posted @ 2007-03-04 00:53 DoubleH 閱讀(2337) | 評論 (8)編輯 收藏

    利用春節的閑暇,開發了一款Java轉EXE文件的工具。
    之前曾經用過一款開源的工具Jsmooth,發現生成的EXE文件通過改名還是可以看見class文件,這一點很不爽,所以自己做了一款,改進這個不足。特性列表:
    1)生成EXE文件,安全發布你的Java程序,防止反編譯
    2)不用設置Classpath了,把依賴的jar包,安全的包含在生成的文件里。(All In One,:-)
    3)支持程序的圖標(Icon)文件設置,使用.ico文件。
    4) 可選帶控制臺或不帶控制臺,并設置控制臺的標題。

    TODO Features:

    1)增加Native Splash Screen
    2)提供本地接口供Java程序使用,比如注冊表訪問,可以在Java代碼里
    使用PlatformAPI.readRegistryKey()本地方法,而PlatformAPI在生成的EXE里內置,并且不再需要另外的DLL文件.(我叫它:Mixing Java Class and JNI DLL files in EXE).
    3)國際化,現在好多參數都只考慮ASCII.

    下載:
    Java2exe_0.0.1.zip
    posted @ 2007-02-25 16:11 DoubleH 閱讀(4063) | 評論 (23)編輯 收藏

    今天發現JDK1.4中的sun.misc.BASE64Encoder有兩個問題
    1)編碼的字節較長時,encode出來的字符竄會在中間插入\n\r
    比如
    編碼"中華人名共和國 呵呵呵呵呵呵呵呵呵呵呵呵呵中華人名共和國 呵呵呵呵呵呵呵呵呵呵呵呵呵"
    生成的字符竄居然有兩行,中間多了回車換行符。
    2)效率較差(見后面的比較)

    下面是我的實現:
    ?1?/**
    ?2??*?@author?yovn
    ?3??*?
    ?4??*/
    ?5?public?class?BASE64Encoder?{
    ?6?
    ?7?????private?static?char[]?codec_table?=?{?'A',?'B',?'C',?'D',?'E',?'F',?'G',
    ?8?????????????'H',?'I',?'J',?'K',?'L',?'M',?'N',?'O',?'P',?'Q',?'R',?'S',?'T',
    ?9?????????????'U',?'V',?'W',?'X',?'Y',?'Z',?'a',?'b',?'c',?'d',?'e',?'f',?'g',
    10?????????????'h',?'i',?'j',?'k',?'l',?'m',?'n',?'o',?'p',?'q',?'r',?'s',?'t',
    11?????????????'u',?'v',?'w',?'x',?'y',?'z',?'0',?'1',?'2',?'3',?'4',?'5',?'6',
    12?????????????'7',?'8',?'9',?'+',?'/'?};
    13?
    14?????public?BASE64Encoder()?{
    15?
    16?????}
    17?
    18?????public?String?encode(byte[]?a)?{
    19?????????int?totalBits?=?a.length?*?8;
    20?????????int?nn?=?totalBits?%?6;
    21?????????int?curPos?=?0;//?process?bits
    22?????????StringBuffer?toReturn?=?new?StringBuffer();
    23?????????while?(curPos?<?totalBits)?{
    24?????????????int?bytePos?=?curPos?/?8;
    25?????????????switch?(curPos?%?8)?{
    26?????????????case?0:
    27?????????????????toReturn.append(codec_table[(a[bytePos]?&?0xfc)?>>?2]);
    28?????????????????break;
    29?????????????case?2:
    30?
    31?????????????????toReturn.append(codec_table[(a[bytePos]?&?0x3f)]);
    32?????????????????break;
    33?????????????case?4:
    34?????????????????if?(bytePos?==?a.length?-?1)?{
    35?????????????????????toReturn
    36?????????????????????????????.append(codec_table[((a[bytePos]?&?0x0f)?<<?2)?&?0x3f]);
    37?????????????????}?else?{
    38?????????????????????int?pos?=?(((a[bytePos]?&?0x0f)?<<?2)?|?((a[bytePos?+?1]?&?0xc0)?>>?6))?&?0x3f;
    39?????????????????????toReturn.append(codec_table[pos]);
    40?????????????????}
    41?????????????????break;
    42?????????????case?6:
    43?????????????????if?(bytePos?==?a.length?-?1)?{
    44?????????????????????toReturn
    45?????????????????????????????.append(codec_table[((a[bytePos]?&?0x03)?<<?4)?&?0x3f]);
    46?????????????????}?else?{
    47?????????????????????int?pos?=?(((a[bytePos]?&?0x03)?<<?4)?|?((a[bytePos?+?1]?&?0xf0)?>>?4))?&?0x3f;
    48?????????????????????toReturn.append(codec_table[pos]);
    49?????????????????}
    50?????????????????break;
    51?????????????default:
    52?????????????????//never?hanppen
    53?????????????????break;
    54?????????????}
    55?????????????curPos+=6;
    56?????????}
    57?????????if(nn==2)
    58?????????{
    59?????????????toReturn.append("==");
    60?????????}
    61?????????else?if(nn==4)
    62?????????{
    63?????????????toReturn.append("=");
    64?????????}
    65?????????return?toReturn.toString();
    66?
    67?????}
    68?
    69?}

    這樣運行一個測試程序
    ?1?public?static?void?main(String[]?args)?throws?Exception?{
    ?2?????????
    ?3?
    ?4?????????BASE64Encoder?encoder=new?BASE64Encoder();
    ?5?????????sun.misc.BASE64Encoder?sunEncoder=new?sun.misc.BASE64Encoder();
    ?6?????????byte[]?testBytes=new?byte[1024*1024*2];
    ?7?????????long?start=System.currentTimeMillis();
    ?8?????????for(int?i=0;i<10;i++)
    ?9?????????{
    10?????????????sunEncoder.encode(testBytes);
    11?????????}
    12?????????
    13?????????System.out.println("[sun?encoder]use?time?:"+(System.currentTimeMillis()-start));
    14?????????start=System.currentTimeMillis();
    15?????????for(int?i=0;i<10;i++)
    16?????????{
    17?????????????encoder.encode(testBytes);
    18?????????}
    19?????????
    20?????????System.out.println("[our?encoder]use?time?:"+(System.currentTimeMillis()-start));
    21?
    22?????}

    出來的結果是:
    [sun encoder]use time :4844
    [our encoder]use time :2609
    差不多慢一倍。


    posted @ 2007-01-31 17:03 DoubleH 閱讀(6589) | 評論 (6)編輯 收藏

    (感覺BlogJava很有人氣,就把原來寫在msn space上的也轉過來)

    通常在Spring發布Hession,RMI等,是非常方便的,

    但是要發布SOAP類型的WebService則要依賴一個獨立的Servlet容器(如Tomcat+Axis),

    這種Webservice一般還有別的配置文件,比如web.xml,wsdd文件等等
    。有時侯,你可能想一臺機器上只部署一個Http Soap Service
    ,這種場合你可能不希望安裝一個類似Tomcat的容器,
    你更希望發布的時候就是一個服務程序,該程序啟動則提供WebService.這篇文章描述一種解決方案。
    開發環境:
    Spring 1.2.6
    XFire 1.0
    Jetty 4.2.1
    方案描述:我們可以通過XFire的編程接口來創建WebService并嵌入一個HttpServer,
    從而來做到在一個獨立應用程序中發布Http Service
    ?1//?Create?an?XFire?Service
    ?2????????ObjectServiceFactory?serviceFactory?=?new?ObjectServiceFactory();
    ?3????????Service?service?=?serviceFactory.create(Echo.class);
    ?4????????service.setInvoker(new?BeanInvoker(new?EchoImpl()));
    ?5????????//?Register?the?service?in?the?ServiceRegistry
    ?6????????XFire?xfire?=?XFireFactory.newInstance().getXFire();
    ?7????????xfire.getServiceRegistry().register(service);
    ?8????????//?Start?the?HTTP?server
    ?9????????XFireHttpServer?server?=?new?XFireHttpServer();
    10????????server.setPort(8191);
    11????????server.start();

    這樣的話,如果發布多個WebSerice則要依次顯式的創建 XFire Service,然后再一一注冊,

    這樣顯然是不夠優雅的。

    我們想要讓開發者在Spring配置文件中指定要發布為WebService的POJOs,

    然后載入Spring環境就自動發布為webservice,而不需要跟 XFire API打交道。

    首先,我們想要一個BeanFacory,能把一個pojo裝配成XFire Service

    ?1?/**
    ?2??*?
    ?3??*/
    ?4?package?com.yovn.ws.xfire.example;
    ?5?
    ?6?import?org.codehaus.xfire.service.Service;
    ?7?import?org.codehaus.xfire.service.binding.BeanInvoker;
    ?8?import?org.codehaus.xfire.service.binding.ObjectServiceFactory;
    ?9?import?org.springframework.beans.factory.FactoryBean;
    10?
    11?/**
    12??*?@author?new
    13??*
    14??*/
    15?public?class?XFireServiceFactoryBean?implements?FactoryBean
    16?{
    17?
    18?????
    19?????
    20?????
    21?????private?Class?serviceClass;
    22?????
    23?????
    24?????private?Object?target;
    25?????
    26?????
    27?????private?Service?service;
    28?????
    29?????
    30?????private?final?ObjectServiceFactory?sf=new?ObjectServiceFactory();
    31?????
    32?????/**
    33??????*?
    34??????*/
    35?????public?XFireServiceFactoryBean()
    36?????{
    37?????????
    38?????}
    39?
    40?????/*?(non-Javadoc)
    41??????*?@see?org.springframework.beans.factory.FactoryBean#getObject()
    42??????*/
    43?????public?Object?getObject()?throws?Exception
    44?????{
    45?????????if(service==null)
    46?????????{
    47?????????????service=sf.create(serviceClass);
    48?????????????service.setInvoker(new?BeanInvoker(target));
    49?????????}
    50?????????return?service;
    51?????}
    52?
    53?????/*?(non-Javadoc)
    54??????*?@see?org.springframework.beans.factory.FactoryBean#getObjectType()
    55??????*/
    56?????public?Class?getObjectType()
    57?????{
    58?????????
    59?????????return?Service.class;
    60?????}
    61?
    62?????/*?(non-Javadoc)
    63??????*?@see?org.springframework.beans.factory.FactoryBean#isSingleton()
    64??????*/
    65?????public?boolean?isSingleton()
    66?????{
    67?????????return?true;
    68?????}
    69?
    70?????public?void?setServiceClass(Class?serviceClass)
    71?????{
    72?????????this.serviceClass?=?serviceClass;
    73?????}
    74?
    75?????public?void?setTarget(Object?target)
    76?????{
    77?????????this.target?=?target;
    78?????}
    79?
    80?}
    81?

    這樣我們可以通過Spring來裝配一個pojo,

    下一步我們要在Spring容器載入時候注冊XFire Service,

    并啟動一個嵌入的Http Server,我們可以借助Spring的ApplicationListener來實現

    ?1?/**
    ?2??*?
    ?3??*/
    ?4?package?com.yovn.ws.xfire.example;
    ?5?
    ?6?
    ?7?import?org.apache.commons.logging.Log;
    ?8?import?org.apache.commons.logging.LogFactory;
    ?9?import?org.codehaus.xfire.XFire;
    10?import?org.codehaus.xfire.XFireFactory;
    11?import?org.codehaus.xfire.server.http.XFireHttpServer;
    12?import?org.codehaus.xfire.service.Service;
    13?import?org.codehaus.xfire.service.ServiceRegistry;
    14?import?org.springframework.context.ApplicationContext;
    15?import?org.springframework.context.ApplicationEvent;
    16?import?org.springframework.context.ApplicationListener;
    17?import?org.springframework.context.event.ContextClosedEvent;
    18?import?org.springframework.context.event.ContextRefreshedEvent;
    19?
    20?/**
    21??*?@author?new
    22??*?
    23??*/
    24?public?class?XFireServiceStarter?implements?ApplicationListener
    25?{
    26?
    27?????private?int?port?=?80;
    28?
    29?????private?XFireHttpServer?server;
    30?????private?final?Log?logger=LogFactory.getLog(getClass().getName());
    31?
    32?????public?void?setPort(int?port)
    33?????{
    34?????????this.port?=?port;
    35?????}
    36?
    37?????public?void?onApplicationEvent(ApplicationEvent?event)
    38?????{
    39?????????try
    40?????????{
    41?????????????if?(event?instanceof?ContextRefreshedEvent)
    42?????????????{
    43?
    44?????????????????if?(server?!=?null)
    45?????????????????{
    46?
    47?????????????????????server.stop();
    48?????????????????????logger.info("xfire?server?stopped");
    49?
    50?????????????????}
    51?????????????????registerService((ApplicationContext)event.getSource());
    52?????????????????server?=?new?XFireHttpServer();
    53?????????????????server.setPort(port);
    54?????????????????server.start();
    55?????????????????logger.info("xfire?server?started");
    56?
    57?????????????}?else?if?(event?instanceof?ContextClosedEvent)
    58?????????????{
    59??????????????????if(server!=null)
    60??????????????????{
    61??????????????????????server.stop();
    62??????????????????????logger.info("xfire?server?stopped");
    63??????????????????}
    64??????????????????
    65?????????????}
    66?
    67?????????}?catch?(Exception?e)
    68?????????{
    69?????????????logger.error("process?event?"+event+"?error",e);
    70?????????}
    71?
    72?????}
    73?
    74?????private?void?registerService(ApplicationContext?context)
    75?????{
    76?????????XFire?xfire=XFireFactory.newInstance().getXFire();
    77?????????ServiceRegistry?registry=xfire.getServiceRegistry();
    78?????????String?names[]=context.getBeanNamesForType(Service.class);
    79?????????
    80?????????for(int?i=0;i<names.length;i++)
    81?????????{
    82?????????????Service?service=(Service)context.getBean(names[i]);
    83?????????????registry.register(service);
    84?????????????logger.info("register?service:"+service.getName());
    85?????????}
    86?????????
    87?????}
    88?
    89?}
    90?

    Ok,我們完成基礎的代碼,下面試著發布一個簡單的WebServie
    1?package?com.yovn.ws.xfire.example;
    2?
    3?public?interface?Add
    4?{
    5?????int?add(int?a,int?b);
    6?
    7?}
    該接口的實現如下
    ?1?package?com.yovn.ws.xfire.example;
    ?2?
    ?3?public?class?AddImpl?implements?Add
    ?4?{
    ?5?
    ?6?????public?int?add(int?a,?int?b)
    ?7?????{
    ?8?????????
    ?9?????????return?a+b;
    10?????}
    11?
    12?}

    這是一個簡單功能的POJO,下面我們在Spring中裝配起來
    ?1?<?xml?version="1.0"?encoding="UTF-8"?>
    ?2?<!DOCTYPE?beans?PUBLIC?"-//SPRING//DTD?BEAN//EN"?"http://www.springframework.org/dtd/spring-beans.dtd">
    ?3?<beans>
    ?4?????<bean?id="addService"?class="com.yovn.ws.xfire.example.XFireServiceFactoryBean">
    ?5?????????<property?name="serviceClass"?value="com.yovn.ws.xfire.example.Add"/>
    ?6?????????<property?name="target"?ref="adder"/>
    ?7?????</bean>
    ?8?????
    ?9?????<bean?id="adder"?class="com.yovn.ws.xfire.example.AddImpl"/>
    10?????<bean?id="xfireStarter"?class="com.yovn.ws.xfire.example.XFireServiceStarter">
    11????????<property?name="port"?value="80"/>
    12?????</bean>
    13?</beans>

    好了,我們完成了,只要載入這個xml初始化一個Spring ApplicationContext,一個名叫Add的webservice就發布了。你可以通過訪問http://localhost/Add?wsdl來獲得webservice的詳細描述!
    posted @ 2007-01-07 17:55 DoubleH 閱讀(5684) | 評論 (4)編輯 收藏

    周末完善了注入代碼的封裝庫
    1)支持指定多個注入的classpath,可以為jar文件,也可為目錄。
    2)?? 支持從指定JVM 卸載,從而可以多次注入/卸載
    3)卸載時同時也將把注入的線程以及從子線程停止。

    新的API如下

    public ?? static ? synchronized ? void ?attachJarToVM(String?pid,String[]?classpaths,String?mainCls) throws ?AttachException;

    public ? static ? synchronized ? boolean ?detachFromVM(String?pid);

    可從這里下載:http://www.tkk7.com/Files/javacap/VMAttach_20060107.zip

    posted @ 2007-01-07 16:49 DoubleH 閱讀(1378) | 評論 (2)編輯 收藏

    僅列出標題
    共5頁: 上一頁 1 2 3 4 5 下一頁 
    主站蜘蛛池模板: 亚洲视频在线观看不卡| 成人免费无码视频在线网站| 国产免费久久精品丫丫| 一本久久免费视频| 一本岛v免费不卡一二三区| 成人a毛片视频免费看| 一级做a爰性色毛片免费| 国产日韩精品无码区免费专区国产| 一级毛片免费毛片毛片| 两个人日本免费完整版在线观看1| WWW免费视频在线观看播放| a视频免费在线观看| 99re这里有免费视频精品| 国内精自视频品线六区免费| 毛片免费观看网站| 国产精品黄页在线播放免费| 亚洲第一成人影院| 久久精品国产亚洲网站| 亚洲综合一区二区精品久久| 国产精品亚洲专区在线观看| 亚洲a∨无码精品色午夜| 一级毛片成人免费看a| 国内精品久久久久影院免费| 久久久久久精品成人免费图片| 无码人妻一区二区三区免费| 国产美女a做受大片免费| 在线观看亚洲成人| 久久精品亚洲精品国产色婷| 最新国产精品亚洲| 一级毛片免费播放视频| 免费91麻豆精品国产自产在线观看| 亚洲成人在线免费观看| 青草草在线视频永久免费| 在线日韩日本国产亚洲| 亚洲日韩乱码中文无码蜜桃| 毛片亚洲AV无码精品国产午夜| 一个人晚上在线观看的免费视频| 久草免费福利资源站| 成年女人免费v片| 在线观看亚洲av每日更新| 亚洲女人18毛片水真多|