@ My Space
posted @
2005-05-13 00:08 非飛 閱讀(2468) |
評論 (2) |
編輯 收藏
@ My space
posted @
2005-05-07 00:19 非飛 閱讀(2232) |
評論 (0) |
編輯 收藏
在JDK1.4.2中加入了對NIO的支持,掌握其中的Selector個人認為是能實現好NIO的關鍵。
Selector是用來獲取注冊在其中的channel的相關事件的發生,也就是accept,read和write。selector中有3個key set。
key set:包含代表所有在其中注冊的channel,可以通過selector.keys()得到。
selected-key set:包含所有被檢測到有關注的操作已經就緒的key,通過selector.selectedKeys得到。
cancelled-key set:包含所有已經被cancel,但是還沒有channel還沒有deregister的key,這個集合是不能直接被訪問的。
key通過調用channel的register方法被加入到key set中。被取消的key在select的時候會被從相應的key set中移除。
key set自身是不可以直接進行修改的。
無論是通過調用channel的close方法還是調用key的cancel方法,key都會被放置到canceled-key set中。取消的key會將其channel在下一次select時將注冊撤銷,同時將key從所有的key set中移除。
key在執行select操作時被加入到selected-key set中。在selected-key
set中的key可以通過調用iterator的remove方法,將其從selected-key
set中移除,不能通過其他的辦法將其從selected-key set中移除。
通過selector的3個方法select(阻塞選擇,直到有關心的事件發生時退出阻塞),selectNow(不阻塞選擇),select(long)(指定超時選擇,超時到達或者有關心事件發生時退出阻塞),來獲取關心事件的發生。其執行步驟分為以下3步:
1、將存在于canceled-key set中的key從所有的key set中移除,撤銷注冊的channel,清空canceled-key set。
2、地層操作系統檢查是否有關心的事件發生,當有關心的事件發生時,首先檢查channel的key是否已經存在于selected-key
set中,如果不存在,則將其加入到selected-key set中去,同時修改key的ready-operation
set來表明當前ready的操作,而以前存在于ready-operation
set中的信息會被刪除。如果對應的key已經存在于selected-key set中,這直接修改其ready-operation
set來表明當前ready的操作,刪除原來ready-operation set中的信息。
3、如果在第二步中有加入到canceled-key set中的key,在這一步會執行第一步的操作。
selector自身是線程安全的,而他的key
set卻不是。在一次選擇發生的過程中,對于key的關心事件的修改要等到下一次select的時候才會生效。
另外,key和其代表的channel有可能在任何時候被cancel和close。因此存在于key
set中的key并不代表其key是有效的,也不代表其channel是open的。如果key有可能被其他的線程取消或關閉channel,程序必須小
心的同步檢查這些條件。
阻塞了的select可以通過調用selector的wakeup方法來喚醒。
posted @
2005-04-26 10:06 非飛 閱讀(17400) |
評論 (3) |
編輯 收藏
在JavaScript中,可以通過window.location來獲取url地址。但是window.location是一個對象,沒有辦法直接從里面獲取出我們需要的參數。通常的做法就是使用一個隱藏的<input>,通過將window.location負值給input。其目的就是為了將location轉換成String。寫的過程中總是覺得太復雜了,后來發現使用document.URL就可以解決這個問題。
posted @
2005-04-18 15:52 非飛 閱讀(4103) |
評論 (3) |
編輯 收藏
今天在幫朋友寫一個簡單的產品發布網站,由于使用的空間是靜態的,沒有辦法只能在javascript上下功夫了。首先想到的便是RIA,上網google了一下,發現這樣的東西還真不少,可謂是十八般武藝各顯靈通。看了看文明的bindows,感覺真的非常的好。可是選擇它對于我要做的東西,可以說是過于復雜了。(http://www.bindows.net 有興趣的朋友可以去看看)。
搜索了半天最后還是決定,采用javascript讀取服務器端xml文件的辦法來實現。嘗試了一下感覺還不錯,確定就是對使用的瀏覽器有依賴。
先寫了一個商品的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來讀入xml實在是相當的簡單,只需要兩句話就可以搞定:
// 裝載xml文件的函數
function loadXML(fileName) {
// 定義一個xml dom對象
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.load(fileName);
xmlObj = xmlDoc.documentElement;
}
指定要載入的xml文件名就可以完成對xml的讀入。
// 載入xml文件
loadXML("product.xml");
得到xml對象后就可以適用對象提供的相應方法和屬性來獲取xml中定義的數據信息。
xmlObj.hasChildNodes來判斷是否含有子項;
xmlObj.childNodes.lenght 得到包含的子項的數量
子項可以用數字來作為索引,以product.xml為例。如果我們要獲取第二條商品時,可以用xmlObj.childNodes(1)來獲得,xmlObj.childNodes(1).childNodes(0)得到的是description
xmlObj.childNodes(1).childNodes(0).text 得到description的值
xmlObj.childNodes(1).getAttribute("name") 得到第二條商品的名字
posted @
2005-04-09 12:23 非飛 閱讀(4722) |
評論 (1) |
編輯 收藏
下載了一個Action Script Viewer 4.0對原來的swf文件進行反編譯,雖然有的movie clip會出現一點問題,但是總的來說效果還是不錯的,而且操作相當的簡單。
1)使用ASV打開要進行反編譯的SWF文件;
2)File-->export rebuild data。這時將swf文件分拆成單個的swf文件;
3)打開flash,創建一個空的fla文件;
4)File-->Import...-->Import to Library 將前面導出的swf文件導入,如果swf文件太多flash會報錯,可以通過分批導入文件來繞過這個錯誤;
5)將新建的swf文件保存為rebuild.fla,并且3)導出的文件在同一目錄;
6)運行3)產生的一個rebuild.jsfl文件,一切搞定。
posted @
2005-04-04 03:32 非飛 閱讀(2708) |
評論 (1) |
編輯 收藏