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

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

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

    向左走,向右走。。。
    永遠(yuǎn)不回頭
    posts - 16,comments - 17,trackbacks - 0
    @ My Space
    posted @ 2005-05-13 00:08 非飛 閱讀(2464) | 評(píng)論 (2)編輯 收藏
    @ My space
    posted @ 2005-05-07 00:19 非飛 閱讀(2228) | 評(píng)論 (0)編輯 收藏
    在JDK1.4.2中加入了對(duì)NIO的支持,掌握其中的Selector個(gè)人認(rèn)為是能實(shí)現(xiàn)好NIO的關(guān)鍵。

    Selector是用來(lái)獲取注冊(cè)在其中的channel的相關(guān)事件的發(fā)生,也就是accept,read和write。selector中有3個(gè)key set。

    key set:包含代表所有在其中注冊(cè)的channel,可以通過(guò)selector.keys()得到。
    selected-key set:包含所有被檢測(cè)到有關(guān)注的操作已經(jīng)就緒的key,通過(guò)selector.selectedKeys得到。
    cancelled-key set:包含所有已經(jīng)被cancel,但是還沒(méi)有channel還沒(méi)有deregister的key,這個(gè)集合是不能直接被訪問(wèn)的。

    key通過(guò)調(diào)用channel的register方法被加入到key set中。被取消的key在select的時(shí)候會(huì)被從相應(yīng)的key set中移除。

    key set自身是不可以直接進(jìn)行修改的。 無(wú)論是通過(guò)調(diào)用channel的close方法還是調(diào)用key的cancel方法,key都會(huì)被放置到canceled-key set中。取消的key會(huì)將其channel在下一次select時(shí)將注冊(cè)撤銷(xiāo),同時(shí)將key從所有的key set中移除。

    key在執(zhí)行select操作時(shí)被加入到selected-key set中。在selected-key set中的key可以通過(guò)調(diào)用iterator的remove方法,將其從selected-key set中移除,不能通過(guò)其他的辦法將其從selected-key set中移除。

    通過(guò)selector的3個(gè)方法select(阻塞選擇,直到有關(guān)心的事件發(fā)生時(shí)退出阻塞),selectNow(不阻塞選擇),select(long)(指定超時(shí)選擇,超時(shí)到達(dá)或者有關(guān)心事件發(fā)生時(shí)退出阻塞),來(lái)獲取關(guān)心事件的發(fā)生。其執(zhí)行步驟分為以下3步:

    1、將存在于canceled-key set中的key從所有的key set中移除,撤銷(xiāo)注冊(cè)的channel,清空canceled-key set。
    2、地層操作系統(tǒng)檢查是否有關(guān)心的事件發(fā)生,當(dāng)有關(guān)心的事件發(fā)生時(shí),首先檢查channel的key是否已經(jīng)存在于selected-key set中,如果不存在,則將其加入到selected-key set中去,同時(shí)修改key的ready-operation set來(lái)表明當(dāng)前ready的操作,而以前存在于ready-operation set中的信息會(huì)被刪除。如果對(duì)應(yīng)的key已經(jīng)存在于selected-key set中,這直接修改其ready-operation set來(lái)表明當(dāng)前ready的操作,刪除原來(lái)ready-operation set中的信息。
    3、如果在第二步中有加入到canceled-key set中的key,在這一步會(huì)執(zhí)行第一步的操作。

    selector自身是線程安全的,而他的key set卻不是。在一次選擇發(fā)生的過(guò)程中,對(duì)于key的關(guān)心事件的修改要等到下一次select的時(shí)候才會(huì)生效。 另外,key和其代表的channel有可能在任何時(shí)候被cancel和close。因此存在于key set中的key并不代表其key是有效的,也不代表其channel是open的。如果key有可能被其他的線程取消或關(guān)閉channel,程序必須小 心的同步檢查這些條件。

    阻塞了的select可以通過(guò)調(diào)用selector的wakeup方法來(lái)喚醒。
    posted @ 2005-04-26 10:06 非飛 閱讀(17393) | 評(píng)論 (3)編輯 收藏

    在JavaScript中,可以通過(guò)window.location來(lái)獲取url地址。但是window.location是一個(gè)對(duì)象,沒(méi)有辦法直接從里面獲取出我們需要的參數(shù)。通常的做法就是使用一個(gè)隱藏的<input>,通過(guò)將window.location負(fù)值給input。其目的就是為了將location轉(zhuǎn)換成String。寫(xiě)的過(guò)程中總是覺(jué)得太復(fù)雜了,后來(lái)發(fā)現(xiàn)使用document.URL就可以解決這個(gè)問(wèn)題。
    posted @ 2005-04-18 15:52 非飛 閱讀(4100) | 評(píng)論 (3)編輯 收藏

    今天在幫朋友寫(xiě)一個(gè)簡(jiǎn)單的產(chǎn)品發(fā)布網(wǎng)站,由于使用的空間是靜態(tài)的,沒(méi)有辦法只能在javascript上下功夫了。首先想到的便是RIA,上網(wǎng)google了一下,發(fā)現(xiàn)這樣的東西還真不少,可謂是十八般武藝各顯靈通。看了看文明的bindows,感覺(jué)真的非常的好。可是選擇它對(duì)于我要做的東西,可以說(shuō)是過(guò)于復(fù)雜了。(http://www.bindows.net 有興趣的朋友可以去看看)。
    搜索了半天最后還是決定,采用javascript讀取服務(wù)器端xml文件的辦法來(lái)實(shí)現(xiàn)。嘗試了一下感覺(jué)還不錯(cuò),確定就是對(duì)使用的瀏覽器有依賴(lài)。
    先寫(xiě)了一個(gè)商品的xml文件:

    <?xml version="1.0"?>
    <root>
     
    <product id="0001" name="product1" price="10.00">
      
    <description>
       Detail Description
      
    </description>
     
    </product>
     
    <product id="0002" name="product2" price="20.00">
      
    <description>
       Detail Description
      
    </description>
     
    </product>
    </root>

     

    使用javascript來(lái)讀入xml實(shí)在是相當(dāng)?shù)暮?jiǎn)單,只需要兩句話就可以搞定:

    // 裝載xml文件的函數(shù)
    function loadXML(fileName) {
     
    // 定義一個(gè)xml dom對(duì)象
     var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
     
     xmlDoc.load(fileName);
     xmlObj 
    = xmlDoc.documentElement;
    }

     

    指定要載入的xml文件名就可以完成對(duì)xml的讀入。

    // 載入xml文件
    loadXML("product.xml");

     

    得到xml對(duì)象后就可以適用對(duì)象提供的相應(yīng)方法和屬性來(lái)獲取xml中定義的數(shù)據(jù)信息。
    xmlObj.hasChildNodes來(lái)判斷是否含有子項(xiàng);
    xmlObj.childNodes.lenght 得到包含的子項(xiàng)的數(shù)量
    子項(xiàng)可以用數(shù)字來(lái)作為索引,以product.xml為例。如果我們要獲取第二條商品時(shí),可以用xmlObj.childNodes(1)來(lái)獲得,xmlObj.childNodes(1).childNodes(0)得到的是description
    xmlObj.childNodes(1).childNodes(0).text 得到description的值
    xmlObj.childNodes(1).getAttribute("name") 得到第二條商品的名字


    posted @ 2005-04-09 12:23 非飛 閱讀(4719) | 評(píng)論 (1)編輯 收藏

    下載了一個(gè)Action Script Viewer 4.0對(duì)原來(lái)的swf文件進(jìn)行反編譯,雖然有的movie clip會(huì)出現(xiàn)一點(diǎn)問(wèn)題,但是總的來(lái)說(shuō)效果還是不錯(cuò)的,而且操作相當(dāng)?shù)暮?jiǎn)單。

    1)使用ASV打開(kāi)要進(jìn)行反編譯的SWF文件;
    2)File-->export rebuild data。這時(shí)將swf文件分拆成單個(gè)的swf文件;
    3)打開(kāi)flash,創(chuàng)建一個(gè)空的fla文件;
    4)File-->Import...-->Import to Library   將前面導(dǎo)出的swf文件導(dǎo)入,如果swf文件太多flash會(huì)報(bào)錯(cuò),可以通過(guò)分批導(dǎo)入文件來(lái)繞過(guò)這個(gè)錯(cuò)誤;
    5)將新建的swf文件保存為rebuild.fla,并且3)導(dǎo)出的文件在同一目錄;
    6)運(yùn)行3)產(chǎn)生的一個(gè)rebuild.jsfl文件,一切搞定。


    posted @ 2005-04-04 03:32 非飛 閱讀(2704) | 評(píng)論 (1)編輯 收藏

    中午收到老姐來(lái)的電話,電話里她是一遍一遍又一遍的在我耳邊嘮叨,說(shuō),“不管你怎么忙,有多少東西要寫(xiě),一定要按時(shí)睡覺(jué)”。還列出了一堆要按時(shí)睡覺(jué)的理由。其實(shí)誰(shuí)不知道應(yīng)該要按時(shí)睡覺(jué),可是作為寫(xiě)程序的程序員來(lái)說(shuō),要真想做到這一點(diǎn)實(shí)在是難,難,難呀!

    要按時(shí)睡覺(jué)的理由


    從人的排毒期入手:晚間11:00--1:00,肝的排毒期(必須在睡覺(jué)中進(jìn)行)
    從人的睡眠最佳時(shí)段入手:1:00--4:00,人的睡眠是質(zhì)量最高的

    不知道各位有誰(shuí)是有正常的生活習(xí)慣的,能不能說(shuō)一說(shuō)你是怎么做到的。。。


    posted @ 2005-03-23 15:25 非飛 閱讀(2120) | 評(píng)論 (3)編輯 收藏

        做項(xiàng)目,無(wú)論是遺留產(chǎn)品的再生產(chǎn),還是對(duì)遺留產(chǎn)品的再利用,都不可避免的會(huì)出現(xiàn)一大堆的異構(gòu)現(xiàn)象。解決異構(gòu)通信問(wèn)題是這類(lèi)項(xiàng)目的主要問(wèn)題。以前看見(jiàn)這種情況第一個(gè)解決方案就是Socket通信。說(shuō)實(shí)在的自己實(shí)現(xiàn)Socket通信,定制通信協(xié)議,或者是實(shí)現(xiàn)已有的通信協(xié)議都是很頭痛的事情。本人有不堪回首的歷史經(jīng)歷。

        最近同樣在項(xiàng)目中需要去解決一個(gè)異構(gòu)問(wèn)題,由于時(shí)間的緊迫,以及先天的運(yùn)行環(huán)境(兩個(gè)部分是運(yùn)行在同一臺(tái)機(jī)器上的)。考慮到了使用JNI,結(jié)果表明JNI是完全可以勝任目前的角色的。以前沒(méi)有了解過(guò)JNI,總是以為它這不好那不好,用了用,表現(xiàn)還不錯(cuò),而且實(shí)現(xiàn)起來(lái)非常之簡(jiǎn)單。

        整個(gè)實(shí)現(xiàn)過(guò)程可以分為五步來(lái)完成:

    1)寫(xiě)一個(gè)聲明了native的Java文件:

    package example;

    public class TestJNI 
    {
        
    static 
    {
            System.loadLibrary(
    "test"
    );
        }

        
        
    public native String getNameCPP();
    }


    2) 使用javah產(chǎn)生對(duì)應(yīng)的CPP頭文件:
    命令:javah -classpath <path> -jni example.TestJNI -d <out_dir>
    生成的頭文件example_TestJNI.h如下:
    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include 
    <jni.h>
    /* Header for class example_TestJNI */

    #ifndef _Included_example_TestJNI
    #define _Included_example_TestJNI
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     example_TestJNI
     * Method:    getNameForCPP
     * Signature: ()Ljava/lang/String;
     
    */

    JNIEXPORT jstring JNICALL Java_example_TestJNI_getNameForCPP
      (JNIEnv 
    *, jobject);

    #ifdef __cplusplus
    }

    #endif
    #endif

    3)實(shí)現(xiàn)對(duì)應(yīng)的CPP代碼:
    #include "example_TestJNI.h"
    #include 
    <string>

    JNIEXPORT jstring JNICALL Java_example_TestJNI_getNameForCPP
      (JNIEnv 
    * env, jobject)
    {
        
    //TODO 可以在此調(diào)用其他的代碼
        std::string strName = "Tower";
        
    return env->NewStringUTF(strName.c_str());
    }


    4) 編譯CPP代碼
    命令:g++ -o libtest.so -shared -I<include_path> -I<java_home>/include -I<java_home>/include/linux example_TestJNI.cpp

    5)執(zhí)行
    package example;

    public class Test {
        
    public static void main(String[] args) {
            TestJNI test 
    = new TestJNI();
            System.
    out.println("Hello " + test.getNameForCPP());
        }

    }


    export LD_EXPORT_PATH=<so_path>
    java -cp <path> -Djava.library.path=<so_path> example.Test
    輸出:Hello Tower
    posted @ 2005-03-22 18:39 非飛 閱讀(3354) | 評(píng)論 (0)編輯 收藏
    主站蜘蛛池模板: 亚洲精品无码久久久久久| 免费能直接在线观看黄的视频 | 一级做受视频免费是看美女| 成人免费在线看片| 一级**爱片免费视频| 日韩亚洲人成在线| 亚洲精品中文字幕无码AV| 亚洲日本va中文字幕久久| 8888四色奇米在线观看免费看| 日韩精品免费一线在线观看| 亚洲成AV人片在| 国产免费的野战视频| 日本视频在线观看永久免费| 一级毛片aaaaaa视频免费看| 亚洲国产综合AV在线观看| 亚洲精品乱码久久久久久中文字幕| 在线看片无码永久免费aⅴ| 无限动漫网在线观看免费 | 免费国产人做人视频在线观看| 久久国产美女免费观看精品| 激情婷婷成人亚洲综合| 亚洲资源在线观看| 国产免费拔擦拔擦8x| 国产成人AV片无码免费| 国产婷婷成人久久Av免费高清| 亚洲中文字幕无码av永久| 亚洲国产av一区二区三区丶| 亚洲综合激情另类专区| 亚洲成年看片在线观看| 中文字幕一精品亚洲无线一区| 亚洲一区无码中文字幕乱码| 亚洲avav天堂av在线不卡| 国产男女猛烈无遮挡免费视频| 午夜爱爱免费视频| 日韩高清免费观看| 国产又粗又长又硬免费视频 | 亚洲一区二区三区不卡在线播放| 亚洲成人网在线播放| 亚洲无码黄色网址| 亚洲色图综合在线| 亚洲人成网77777色在线播放|