ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>操操操综合网,嫩草在线播放,一区二区三区中文字幕在线观看http://www.aygfsteel.com/RexMao/分äínjava技术与生活zh-cnWed, 25 Jun 2025 00:35:14 GMTWed, 25 Jun 2025 00:35:14 GMT60Oracle SQLPLUS 常用命ä×o(h¨´)ž®ç»“åQˆä¸€åQ?/title><link>http://www.aygfsteel.com/RexMao/archive/2008/05/17/201089.html</link><dc:creator>Rex Mao</dc:creator><author>Rex Mao</author><pubDate>Sat, 17 May 2008 06:11:00 GMT</pubDate><guid>http://www.aygfsteel.com/RexMao/archive/2008/05/17/201089.html</guid><wfw:comment>http://www.aygfsteel.com/RexMao/comments/201089.html</wfw:comment><comments>http://www.aygfsteel.com/RexMao/archive/2008/05/17/201089.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.aygfsteel.com/RexMao/comments/commentRss/201089.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/RexMao/services/trackbacks/201089.html</trackback:ping><description><![CDATA[<p dir="ltr" style="margin-right: 0px"><br /> <strong>1. 昄¡¤ºå½“前˜qžæŽ¥ã€?/strong><br /> <br /> SQLåQ?br /> <span style="color: #999999"><span style="color: #999999"><span style="color: #999999"><span style="color: #000000; background-color: #c0c0c0"><font style="background-color: #c0c0c0" color="#999999"><span style="color: #999999"><span style="color: #999999"><span style="color: #999999"><span style="color: #000000; background-color: #ffffff"><font color="#999999">        </font>SELECT *                                                                                                                                                 <br />         FROM V$SESSION                                                                                                                                 <br />         WHERE STATUS = 'INACTIVE'                                                                                                             <br />         AND USERNAME IS NOT NULL;                                                                                                         </span></span></span></span></font><span style="background-color: #999999"><br /> </span></span></span></span><span style="color: #000000; background-color: #999999"><br /> </span></span></p> <strong>2. 强制关闭用户的连æŽ?/strong><br /> <br /> SQL:<br /> <span style="background-color: #ffffff"><span style="color: #000000"><span style="background-color: #c0c0c0"><font style="background-color: #c0c0c0"><span style="background-color: #ffffff"><span style="color: #000000">    a) SELECT USERNAME, SID, SERIAL#                                                                                                    <br />         FROM V$SESSION                                                                                                                                 <br />         WHERE STATUS = 'INACTIVE'                                                                                                             <br />         AND USERNAME IS NOT NULL;                                                                                                         <br />                                                                                                                                                                           <br />     b) ALTER SYSTEM KILL SESSION 'SID, SERIAL#'; --SID å’?SERIAL#是在步骤a)中得到的¾l“æžœã€?/span></span></font><br /> </span></span></span><br /> <strong>3. ä»Žè¿”回的¾l“果中选择½W¬m到n条记å½?/strong><br /> <br /> SQL:<br /> <span style="background-color: #c0c0c0"><span style="background-color: #ffffff">        <span style="color: #000000">SELECT *                                                                                                                                                   <br />         FROM (                                                                                                                                                      <br />                      SELECT A.*, ROWNUM RN                                                                                                       <br />                      FROM (                                                                                                                                         <br />                                    SELECT *                                                                                                                        <br />                                    FROM YOURTABLE --˜q™é‡Œè¯ïL(f¨¥ng)”¨ä½ çš„SELECT语句代替                                            <br />                                   ) A                                                                                                                                     <br />                      WHERE ROWNUM <= n                                                                                                              <br />                      )                                                                                                                                                      <br />         WHERE RN >= m;                                                                                                                                      <br /> </span></span></span>    <br /> <strong>4. 重新¾~–译åŒ?(package) å’?包体 (package body)</strong><br />     此命令可以用于查看在SQLPLUS中创建的package的编译错误ã€?br /> <br /> SQL:<br />         a) ¾~–译 package<br /> <span style="color: #000000; background-color: #c0c0c0"><span style="background-color: #ffffff"><span style="background-color: #c0c0c0"><span style="color: #000000"><span style="background-color: #ffffff"><span style="color: #000000"><span style="color: #000000">            <span style="color: #000000">ALTER PACKAGE YOUR_PACKAGE                                                                                                 <br />             COMPILE SPECIFICATION;                                                                                                                <span style="color: #999999"><span style="color: #000000"><br /> </span></span></span></span></span>        b) ¾~–译 package body</span></span></span></span></span><br /> <span style="color: #000000; background-color: #ffffff">            ALTER PACKAGE YOUR_PACKAGE                                                                                                 <br />             COMPILE BODY;                                                                                                                                   </span><span style="color: #000000"><br />         c) 查看错误<br /> </span><span style="color: #000000; background-color: #c0c0c0"><span style="background-color: #ffffff"><span style="color: #000000">            SHOW ERR;                                                                                                                                             </span></span><br /> </span><br /> <strong>5. 解除锁定的用æˆ?br /> <br /> SQL:<br /> SQL:<br /> </strong>    ALERT USER USERNAME UNLOCK;<br /> <br /> <br />  <span style="color: #000000"><span style="color: #c0c0c0"><span style="background-color: #999999"><br /> </span></span></span> <img src ="http://www.aygfsteel.com/RexMao/aggbug/201089.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/RexMao/" target="_blank">Rex Mao</a> 2008-05-17 14:11 <a href="http://www.aygfsteel.com/RexMao/archive/2008/05/17/201089.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVAæ–‡äšg传输½E‹åºhttp://www.aygfsteel.com/RexMao/archive/2007/11/03/157892.htmlRex MaoRex MaoSat, 03 Nov 2007 03:19:00 GMThttp://www.aygfsteel.com/RexMao/archive/2007/11/03/157892.htmlhttp://www.aygfsteel.com/RexMao/comments/157892.htmlhttp://www.aygfsteel.com/RexMao/archive/2007/11/03/157892.html#Feedback5http://www.aygfsteel.com/RexMao/comments/commentRss/157892.htmlhttp://www.aygfsteel.com/RexMao/services/trackbacks/157892.html ç”׃ºŽåªäØ“(f¨´)毕业设计而写的,只实çŽîCº†åŠŸèƒ½åQŒæ²¡æœ‰åœ¨é€Ÿåº¦ä¸Šä¼˜åŒ–,发上来只为给要做¾cÖM¼¼½E‹åºçš„æœ‹å‹åšä¸ªå‚考。以下是毕业论文中的节选ã€?br />

源代码已¾lä¸Šä¼ äº†ã€?br />
½W?/span>3ç«?nbsp;     设计文æ¡£

3åQ?/span>1       ä»ÕdŠ¡æ¦‚è¿°

       本项ä»ÕdŠ¡è¦å¼€å‘ä¸€‹Æ?/span>P2Pæ–‡äšg传输软äšgåQŒè¯¥è½¯äšg可以在局域网和互˜qžä¸Šä½¿ç”¨åQŒå…·æœ‰æ–‡ä»¶ä¼ è¾“,断点¾l­ä¼ åQŒå¤š¾U¿ç¨‹˜qžæŽ¥½{‰åŠŸèƒ½ã€?/span>

3åQ?/span>1åQ?/span>1      开发背æ™?/span>

       随着¾|‘络的普å?qi¨¢ng),在网¾lœä¸­äº¤æ¢ä¿¡æ¯åQŒç‰¹åˆ«æ˜¯æ–‡äšgæˆäØ“(f¨´)使用¾|‘络时经常性工作,现有的文件传输工具如QQã€?/span>MSN½{‰ï¼Œä¸»è¦åŠŸèƒ½æ˜¯ä½œä¸ºå³æ—‰™€šè®¯å·¥å…·ä½¿ç”¨åQŒè€Œä¸”在局域网中ä‹É用时仍需˜qžæŽ¥åˆîCº’˜qžç½‘。本文开发的软äšgåŸÞZºŽP2P¾l“构实现文äšg传输åQŒä¸ä¾é æœåŠ¡å™¨ç»´æŠ¤ç”¨æˆ¯‚µ„料,所以,只要两台机器可以˜qžé€šï¼Œž®±å¯ä»¥è¿›è¡Œæ–‡ä»¶ä¼ è¾“ã€?/span>

3åQ?/span>1åQ?/span>2       定义

       P2PåQšå³peer-to-peeråQŒå¯ä»¥ç†è§£äØ“(f¨´)点对点,或对½{‰ä¼ è¾“的意思ã€?/span>

3åQ?/span>1åQ?/span>3       开发工å…?/span>

       开发采ç”?/span>JAVA语言åQŒå¼€å‘工具䨓(f¨´)jbuilder 2005

3åQ?/span>2       æ–‡äšg传输业务‹¹ç¨‹

3åQ?/span>2åQ?/span>1       通讯™åºåºå…³ç³»

       在文件传输时åQŒä¼ è¾“过½E‹å¯ä»¥ç®€å•çš„åˆ†äØ“(f¨´)4步,如图 åQ?/span>

1ã€?span style="font: 7pt 'Times New Roman'">              由文件发送者发èµäh–‡ä»¶ä¼ è¾“,他首先发送文件名åQŒæ–‡ä»¶å¤§ž®ï¼ŒéªŒè¯æ¶ˆæ¯½{‰ä¿¡æ¯ç»™æ–‡äšg接收者ã€?/span>

2ã€?span style="font: 7pt 'Times New Roman'">              æ–‡äšg接收者收到文件信息和发送者信息,军_®šæ˜¯å¦æŽ¥æ”¶åQŒå¦‚不接æ”Óž¼Œåˆ™å‘送拒¾læŽ¥æ”¶æ¶ˆæ¯ç»™æ–‡äšg发送者,文äšg传输¾l“束。如同意接收åQŒå‘送同意接收消息和文äšg传输起始字节åQˆç”¨äºŽæ–­ç‚¹ç®‹ä¼ ï¼‰¾l™å‘送者ã€?/span>

3ã€?span style="font: 7pt 'Times New Roman'">              发送者开始发送文件数据包åQŒç›´åˆ°æœ€åŽä¸€ä¸ªæ–‡ä»¶æ•°æ®åŒ…åQŒå‘送者在最后一个文件数据包上加上标记ã€?/span>

4ã€?span style="font: 7pt 'Times New Roman'">              接收者识别最后一个文件数据包åQŒæ–‡ä»¶ä¼ è¾“成功ã€?/span>


3åQ?/span>2åQ?/span>2       æ–‡äšg发送端的详¾l†ä¸šåŠ¡æµ½E?/span>


 

图中昄¡¤ºäº†å‘送文件时的详¾l†ä¸šåŠ¡æµ½E‹ã€?/span>

1、首先,要选择要发送的文äšgåQŒå¯ä»¥é€‰æ‹©ä¸€ä¸ªæ–‡ä»¶æˆ–同一个文件夹下的多个文äšg发送,当选择多个文äšgæ—Óž¼Œè½¯äšgž®†äØ“(f¨´)每个文äšg建立一个传输线½E‹ã€‚选择文äšg后,发送者要填写目标IP和端口,ç”׃ºŽæ˜¯åŸºäº?/span>P2P的文件传输,不存在服务器¾l´æŠ¤å¥½å‹åˆ—表åQŒæ‰€ä»¥éœ€è¦çŸ¥é“ç›®æ ?/span>IP才能传输文äšgåQŒç”¨æˆ·ä¹Ÿå¯ä»¥å¡«å†™éªŒè¯æ¶ˆæ¯ç”¨äºŽæè¿°è‡ªå·±çš„èín份和文äšg的介¾lã€?/span>

2、发送者收到确认包åQŒåˆ¤æ–­æ˜¯å¦æŽ¥æ”¶æ–‡ä»Óž¼Œå¦‚果不接æ”Óž¼Œåˆ™ä¼ è¾“结束,如果接收åQŒåˆ™æ‰“开要发送的文äšgåQŒè®¾¾|®è“v始传输字节ã€?/span>

3、发送者读取一个文件片ŒDµï¼ŒåŠ å…¥æ˜¯å¦æ˜¯æœ€åŽä¸€ä¸ªæ–‡ä»¶ç‰‡ŒD늚„标志åQŒæ‰“包发¾l™æŽ¥æ”¶è€…ã€?/span>

4、发送完最后一个文件片ŒD‰|—¶åQŒæ–‡ä»¶ä¼ è¾“结束ã€?/span>

3åQ?/span>2åQ?/span>3       æ–‡äšg接收者详¾l†ä¸šåŠ¡æµ½E?/span>


 

1ã€?nbsp;从一打开软äšg开始,监听¾U¿ç¨‹ž®×ƒ¼š(x¨¬)启动åQŒè¿™æ—¶ç”¨æˆ·å°±æ‰®æ¼”者文件接收者的角色åQŒå½“有文件发送者发来请求时åQŒç›‘听线½E‹å¾ç«‹ä¸Žå‘送者的˜qžæŽ¥åQŒåƈ创徏传输¾U¿ç¨‹åQŒæŽ¥æ”¶è€…得到发送者传来的文äšg信息和验证消息,用户˜q˜èƒ½å¾—到发送者的IP地址åQŒç”¨æˆäh ¹æ®è¿™äº›ä¿¡æ¯å†³å®šæ˜¯å¦æŽ¥æ”¶æ–‡ä»Óž¼Œòq¶å‘送确认包¾l™å‘送者,¼‹®è®¤åŒ…里包含了是否接收的标志åQŒå’Œå¼€å§‹ä¼ è¾“的起始字节ã€?/span>

2ã€?nbsp;接收者开始接收数据包åQŒè§£åŒ…,写入文äšg中,直到最后一个文件片ŒDµï¼Œå…³é—­æ–‡äšgåQŒæ–‡ä»¶ä¼ è¾“结束ã€?/span>

3åQ?/span>3       软äšg的传输协议设è®?/span>

       ä¸ÞZº†æ›´å¥½çš„æŽ§åˆ¶æ–‡ä»¶ä¼ è¾“çš„‹¹ç¨‹åQŒå¼€å‘设计了文äšg传输协议åQŒè¯¥åè®®å±žäºŽåº”用层协议,ä¸ÞZº†ä¸ä‹É传输˜q‡ç¨‹˜q‡äºŽå¤æ‚åQŒåè®®å°½é‡ç®€å•设计。主要的内容是传输包的格式ã€?/span>

3åQ?/span>3åQ?/span>1       传输包的格式


 

其中传输包的¾cÕdž‹æœ?/span>3¿Uï¼š(x¨¬)

PACKAGE_TYPE_FILENAME = 0x01

æ–‡äšg名包åQŒè¯¥åŒ…用于文件发送者向接收者发送文件信息和验证消息

PACKAGE_TYPE_CONTEXT = 0x02

æ–‡äšg内容包,该包用于传输文äšg内容

PACKAGE_TYPE_CONFIRMRECEIVE = 0x03

æ–‡äšg传输¼‹®è®¤åŒ…,该包用于文äšg接收者向发送者确认文件的接收

3åQ?/span>3åQ?/span>2       æ–‡äšg名包格式


 

3åQ?/span>3åQ?/span>3      æ–‡äšg传输包格å¼?br />

 

其中MORE_DATA用于¼‹®è®¤æ˜¯å¦æ˜¯æ–‡ä»¶ç‰‡ŒD늚„最后一个包åQŒä»¥¾l“束文äšg的传输ã€?/span>0表示没有数据åQ?/span>1表示˜q˜æœ‰æ•°æ®ã€?/span>

3åQ?nbsp;3åQ?/span>4      æ–‡äšg接受¼‹®è®¤åŒ…æ ¼å¼?/span>


 

其中CONFIRM_FLAG表示是否¼‹®è®¤æ–‡äšg接收åQ?/span>1表示接收åQ?/span>0表示不接æ”Óž¼Œå½“接收时åQ?/span>OFF表示文äšg传输的è“v始字节,用来实现断点¾l­ä¼ ã€?/span>

3åQ?       æ–‡äšg传输的状态机

æ–‡äšg传输¾U¿ç¨‹çš„地层其实就是一个状态è{换机åQŒçº¿½E‹å…·æœ‰å‡ ä¸ªçŠ¶æ€ï¼Œ¾U¿ç¨‹ä»Žæ–‡ä»¶åä¼ è¾“状态开始,æ ÒŽ(gu¨©)®æ–‡äšg传输的不同情况,在各个状态间转换åQŒç›´åˆîC¼ è¾“成功或传输å¤ÞpÓ|ã€?/span>

FILE_TRANS_STATUS_FILENAME = 0x01

æ–‡äšg名称传输状态,文äšg传输刚徏立连接时åQŒä¼ è¾“状态处于文件名传输状æ€?/span>

FILE_TRANS_STATUS_CONTEXT = 0x02

æ–‡äšg内容传输转台åQŒåœ¨ä¼ è¾“æ–‡äšg内容æ—Óž¼Œä¼ è¾“状态属于该状æ€?/span>

FILE_TRANS_STATUS_WAITFORCONFIRM = 0x03

½{‰å¾…¼‹®è®¤çŠ¶æ€ï¼Œæ–‡äšg发送者,发送完文äšg信息和验证消息后åQŒå¤„于该状态,文äšg接收者接收到文äšg信息和验证消息后处于该状æ€?/span>

FILE_TRANS_STATUS_SUCCESS = 0x04

æ–‡äšg传输成功状态,表示文äšg已成功传输完æ¯?/span>

FILE_TRANS_STATUS_FAIL = 0x05

æ–‡äšg传输å¤ÞpÓ|状态,表示文äšg传输已经å¤ÞpÓ|åQŒå¤±è´¥åŽŸå› å¯èƒ½æ˜¯å¯ÒŽ(gu¨©)–¹å–消了文件传输或¾|‘络错误




 

3åQ?        ¾l“构设计

软äšg主要ç”?/span>MainFrame,TransFileManager,SocketThread,Server,TransFilePanel五个¾cÀLž„成图 表示了这几个¾cÖM¹‹é—´çš„关系ã€?/span>


 

¾cÕdŠŸèƒ½ä»‹¾l?/span>

MainFrame

MainFrame¾cÀL˜¯è½¯äšg的主界面¾c»ï¼Œè´Ÿè´£ä¸Žç”¨æˆïL(f¨¥ng)š„交互ã€?/span>

TransFileManager

TransFileManager¾cÀL˜¯æ–‡äšg传输的控制类åQŒè´Ÿè´£ç®¡ç†æ–‡ä»¶çš„传输åQŒå®ƒ¾l´æŠ¤ä¸€ä¸ªä¼ è¾“线½E‹ï¼ˆSocketThreadåQ‰çš„列表åQŒæ¯ä¸ªçº¿½E‹éƒ½è¡¨ç¤ºä¸€ä¸ªæ­£åœ¨ä¼ è¾“çš„ä»ÕdŠ¡ã€?/span>TransFileManager¾cÕd®šæ—¶çš„æ‰«æå„个¾U¿ç¨‹çš„状态,æ ÒŽ(gu¨©)®ä¸åŒçŠ¶æ€åšå‡ÞZ¸åŒå¤„理,如计½Ž—传输速度åQŒæ˜¾½CÞZ¼ è¾“进度等ã€?/span>

SocketThread

SocketThread¾cÀL˜¯æ–‡äšg传输¾U¿ç¨‹¾c»ï¼Œå®ƒè´Ÿè´£åº•层的具体传输工作åQŒåŒ…括打包与解包åQŒåƈ且è{换自å·Þqš„状态,完成文äšg的传输ã€?/span>

Server

Server¾cÀL˜¯ä¸?/span>TransFileManager¾cÖM‹É用的åQŒå®ƒè´Ÿè´£æœ¬åœ°ç«¯å£çš„监听,一旦有用户˜qžæŽ¥åQ?/span>TransFileManagerž®±åˆ›å»ÞZ¸€ä¸ªä¼ è¾“线½E‹ï¼Œæ”‘Ö…¥¾U¿ç¨‹åˆ—表。而它¾l§ç®‹ç›‘听端口ã€?/span>

TransFilePanel

TransFilePanel是一个面板,它用有按钮、进度条åQŒæ ‡½{„¡­‰ç”¨æ¥æ˜„¡¤ºæ–‡äšg的传输状态ã€?/span>

3åQ?        ¾c»è®¾è®?/span>

3åQ?/span>6åQ?/span>1       MainFrame

该类是视囄¡±»åQŒæ˜¯è½¯äšg的主界面ã€?br />

 

成员变量åQ?/span>

contentPane

contentPaneæ˜?/span>JPanel¾cȝš„对象åQŒæ˜¯ä¸È•Œé¢çš„面板ã€?/span>

jbtnSend

jbtnSendæ˜?/span>JButton¾cÕd¯¹è±¡ï¼Œç‚¹å‡»å®ƒå°†æ‰“开文äšg传输对话框ã€?/span>

jbtnSetting

jbtnSettingæ˜?/span>JButton¾cÕd¯¹è±¡ï¼Œç‚¹å‡»å®ƒå°†æ‰“开讄¡½®å¯¹è¯æ¡†ã€?/span>

jlblIP

jlblIPæ˜?/span>JLable¾cÕd¯¹è±¡ï¼Œå®ƒæ˜¾½Cºæœ¬æœºçš„IP地址åQŒæ–¹ä¾¿æ–‡ä»¶çš„传输ã€?/span>

jtpTransFile

jtpTransFileæ˜?/span>JTabbedPane¾cÕd¯¹è±¡ï¼Œæ˜¯é€‰é¡¹å¡æŽ§ä»Óž¼Œç”¨äºŽæ˜„¡¤ºå¤šä¸ªæ–‡äšg同时传输ã€?/span>

tfm

tfmæ˜?/span>TransFileManager¾cÕd¯¹è±¡ï¼Œè´Ÿè´£æŽ§åˆ¶æ–‡äšg的传输ã€?/span>

成员æ–ÒŽ(gu¨©)³•åQ?/span>

jbtnSend_anctionPerformed()

è¯¥æ–¹æ³•äØ“(f¨´)jbtnSend按钮的点å‡ÖMº‹ä»?/span>

jbtnSetting_actionPerformed()

è¯¥æ–¹æ³•äØ“(f¨´)jbtnSetting按钮的点å‡ÖMº‹ä»?/span>

This_windowClosed()

è¯¥æ–¹æ³•äØ“(f¨´)½H—口关闭事äšg

界面截图åQ?/span>


 

3åQ?/span>6åQ?/span>2       TransFileManager¾c?/span>

该类负责传输˜q‡ç¨‹ä¸­å¯¹å„个传输¾U¿ç¨‹çš„æ£€‹¹‹ä¸ŽæŽ§åˆ¶ã€?/span>


 

成员变量åQ?/span>

jtp

jtp是选项卡控件对象,æ˜?/span>MainFrame¾cÖM¸­jtpTransFile对象的一个引用ã€?/span>

panelist

paneListæ˜?/span>ArrayList¾cÕd¯¹è±¡ï¼Œå®ƒæ˜¯ä¸€ä¸ªé“¾è¡¨ç»“构,存储使用的选项卡ã€?/span>

running

running是一ä¸?/span>boolean型的对象åQŒç”¨æ¥è¡¨½Cºçº¿½E‹æ˜¯å¦åœ¨æ‰§è¡Œã€?/span>

s

sæ˜?/span>Server¾cȝš„对象åQŒç”¨æ¥åšå¬æœ¬åœ°ç«¯å£ï¼Œ½{‰å¾…用户的连接ã€?/span>

threadList

threadListæ˜?/span>ArrayList¾cÕd¯¹è±¡ï¼Œå®ƒæ˜¯ä¸€ä¸ªé“¾è¡¨ç»“构,存储使用的传输线½E‹ã€?/span>

maxThreadNum

maxTreadNum是整型变量,表示最大允许的¾U¿ç¨‹æ•°ã€?/span>

port

port是整型变量,表示使用的端口号�/span>

成员æ–ÒŽ(gu¨©)³•åQ?/span>

close()

该方法用于关闭文件传输的控制�/span>

sendFile()

该方法用于徏立一个文件发送,要求输入参数为,目标IPåQŒç«¯å£å·åQŒè¦å‘送的文äšg和验证消息ã€?/span>

3åQ?åQ?           SocketThread¾c?/span>

SocketThread¾cÀL˜¯æ–‡äšg传输的底层支持类åQŒå®ƒæä¾›æ–‡äšg传输的服务ã€?/span>


 

成员变量åQ?/span>

sendBuf

sendBuf是一个字节型数据åQŒå®ƒæ˜¯æ–‡ä»¶å‘送和接收时的¾~“冲区ã€?/span>

dis

dis�/span>DataInputStream型对象,它是�/span>Socket对象得到的输入流�/span>

dos

dos�/span>DataOutputStream型对象,它是�/span>Socket对象得到的输出流�/span>

fDis

fDisæ˜?/span>DataInputStream型对象,它是要发送的文äšg的输入流ã€?/span>

raf

rafæ˜?/span>RandomAccessFile型对象,该对象允许设¾|®è¾“出流的位¾|®ï¼Œä»¥æ”¯æŒæ–­ç‚¹ç®‹ä¼ ã€?/span>

running

running是一ä¸?/span>boolean型对象,用来表示¾U¿ç¨‹æ˜¯å¦åœ¨æ‰§è¡Œã€?/span>

serverName

serverName是字½W¦ä¸²åž‹å¯¹è±¡ï¼Œè¡¨ç¤ºæœåŠ¡å™¨çš„åœ°å€åQŒè¯¥å¯¹è±¡åªæœ‰åœ¨çº¿½E‹ä½œä¸ºå‘送者时使用ã€?/span>

errorMessage

errorMessage是字½W¦ä¸²åž‹å¯¹è±¡ï¼Œè¡¨ç¤ºå‡ºé”™çš„信息ã€?/span>

fileName

fileName是字½W¦ä¸²åž‹å¯¹è±¡ï¼Œè¡¨ç¤ºæ–‡äšg名ã€?/span>

fileSender

fileSender是一�/span>boolean型对象,表示是文件发送者还是文件接收者�/span>

IP

IP是字½W¦ä¸²åž‹å¯¹è±¡ï¼Œç”¨æ¥å­˜æ”¾ç›®çš„æœºçš„IP地址ã€?/span>

message

message是字½W¦ä¸²åž‹å¯¹è±¡ï¼Œç”¨æ¥è¡¨ç¤ºéªŒè¯ä¿¡æ¯ã€?/span>

port

port是整型变量,表示˜qžæŽ¥çš„端口号ã€?/span>

transFileLength

transFileLength是长整型变量åQŒè¡¨½Cºå·²¾lä¼ è¾“的文äšg长度åQ?/span>TransFileManager可以用它来计½Ž—传输进度和传输速度

成员æ–ÒŽ(gu¨©)³•åQ?/span>

cancelTrans()

该方法用于取消传�/span>

confirmReceiveFile()

该方法用于确认传输文�/span>

参数flag用来表示是否同意传输

参数fileName用来表示保存的文�/span>

参数off用来表示起始传输字节

getFileTransMessage()

该方法用于得到文件传输的基本信息。如åQšæ–‡ä»¶å‘é€çš„ç›®æ ‡åQŒç«¯å£å·½{‰ã€?/span>

getStatus()

该方法返回一个整型变量,表示当前¾U¿ç¨‹çš„传输状态ã€?/span>

run()

¾U¿ç¨‹çš„æ‰§è¡Œæ–¹æ³•,该方法中循环执行发送或接收æ–ÒŽ(gu¨©)³•åQŒå®Œæˆæ–‡ä»¶çš„发送或接收ã€?/span>

setError()

该方法通过一个字½W¦ä¸²åž‹çš„参数讄¡½®é”™è¯¯ä¿¡æ¯ã€?/span>

stopThread()

该方法用于停止线½E‹çš„æ‰§è¡Œã€?/span>

doPackage()

打包æ–ÒŽ(gu¨©)³•åQŒè¯¥æ–ÒŽ(gu¨©)³•中,æ ÒŽ(gu¨©)®¾U¿ç¨‹æ‰€å¤„的不同状态,å¯ÒŽ(gu¨©)•°æ®åŠ å…¥ä¸åŒçš„åŒ…å¤´å’Œå…¶ä»–ä¿¡æ¯ï¼Œ˜q›è¡Œæ‰“包ã€?/span>

readFromFile()

该方法从要发送的文äšg中读取一个整型数ã€?/span>

readFromSocket()

该方法从Socket输入‹¹è¯»å–一个整型数åQŒå®ƒæœ‰ä¸€ä¸ªé‡è½½ç‰ˆæœ¬è¯»å–一个字节数¾l„的数据ã€?/span>

receiveFile()

è¯¥æ–¹æ³•äØ“(f¨´)接收文äšg的方法,是线½E‹åó@环中åQŒæ–‡ä»¶æŽ¥æ”¶è€…执行的æ–ÒŽ(gu¨©)³•ã€?/span>

sendFile()

è¯¥æ–¹æ³•äØ“(f¨´)发送文件方法,是线½E‹åó@环中åQŒæ–‡ä»¶å‘送者执行的æ–ÒŽ(gu¨©)³•ã€?/span>

writeToFile()

该方法写一个字节数据的数据åˆîC¿å­˜çš„æ–‡äšg中ã€?/span>

writeToSocket()

该方法写数据åˆ?/span>Socket输出‹¹ä¸­åQŒå®ƒæœ‰ä¸‰ä¸ªé‡è½½ç‰ˆæœ¬ï¼Œåˆ†åˆ«æ˜¯å†™å…¥æ•´åž‹æ•°åQŒå†™å…¥é•¿æ•´åž‹æ•°å’Œå†™å…¥å­—节数组数据ã€?/span>

3åQ?åQ?            TransFilePanel¾c?/span>

˜q™ä¸ª¾cÕd±žäºŽè§†å›„¡±»åQŒå®ƒä½œäØ“(f¨´)ä¸È•Œé¢ä¸Šçš„一个对象ä‹É用,含有˜q›åº¦æ¡ï¼ŒæŒ‰é’®åQŒæ ‡½{„¡š„对象åQŒç”¨äºŽæ˜¾½Cºæ–‡ä»¶ä¼ è¾“状态,每一个传输线½E‹éƒ½æ‹¥æœ‰è‡ªå·±çš?/span>TransFilePanel¾cÕd¯¹è±¡ã€?/span>


 

成员变量åQ?/span>

fileName

fileName是一个字½W¦ä¸²åQŒè¡¨½CÞZ¼ è¾“文件的文äšg名ã€?/span>

fileSender

fileSender�/span>boolean型对象,表示是文件发送者还是接收者�/span>

isCanneled

isCanneledæ˜?/span>boolean型对象,传输˜q‡ç¨‹ä¸­ï¼Œç”¨æˆ·ç‚¹äº†å–消按钮后,该标志位¾|?/span>trueåQ?/span>TransFileManagerä¼?x¨¬)åó@环检‹¹?/span>isCanneled标志åQŒå½“å‘çŽ°å…¶äØ“(f¨´)true后,它会(x¨¬)关闭对应的传输线½E‹ï¼Œè€Œå¯¹æ–¹ä¼š(x¨¬)‹‚€‹¹‹åˆ°ä¼ è¾“错误åQŒæ–‡ä»¶ä¼ è¾“就停止了ã€?/span>

isClosed

isClosedæ˜?/span>boolean型对象,它表½Cºå½“传输˜q‡ç¨‹å·²ç»åœæ­¢æ—Óž¼Œç”¨æˆ·ç‚¹å‡»äº†å…³é—­æŒ‰é’®ï¼ŒTransFileManager‹‚€‹¹‹åˆ°isClosedä¸?/span>trueæ—Óž¼Œä¼?x¨¬)在列表中去掉对应的传输¾U¿ç¨‹å’?/span>TransFilePanelã€?/span>

isConfirm

isConfirmæ˜?/span>boolean型对象,它表½Cºæ–‡ä»¶æŽ¥æ”¶è€…是否确认了文äšg接收后(包括同意和拒¾lï¼‰åQ?/span>TransFileManager‹‚€‹¹‹åˆ°isConfirmä¸?/span>trueæ—Óž¼Œä¼?x¨¬)å°†¼‹®è®¤çŠ¶æ€å‘¾l™æ–‡ä»¶å‘送者ã€?/span>

jbtnCannel

jbtnCannel是取消按钮�/span>

jbtnOK

jbtnOK是确定按钮�/span>

jpgbFileTrans

jpgbFileTrans是文件传输的˜q›åº¦æ¡ã€?/span>

jtaFileTransStatus

jtaFileTransStatus是一个文本框åQŒç”¨æ¥æ˜¾½Cºæ–‡ä»¶ä¼ è¾“的状态ã€?/span>

transFileLength

transFileLength是一个长整型变量åQŒç”¨æ¥è¡¨½Cºå·²¾lä¼ è¾“的文äšg长度ã€?/span>

status

status是一个整行变量,表示文äšg传输的状态,所表示的状态与SocketThread中的对应ã€?/span>

界面截图


 

3åQ?              ½Ž—法介绍

3åQ?/span>7åQ?/span>1 TransFileManagerçš„åó@环监å?/span>

TransFileManger¾cȝ‘ô承了Thread¾c»ï¼Œå®žçŽ°å¤šçº¿½E‹ï¼Œé¿å…å¾ªçŽ¯ç›‘å¬æ—¶äñ”生阻塞ã€?/span>

以下是在每次循环中做的工�/span>

1ã€?nbsp;得到传输¾U¿ç¨‹(SocketThread)的数量和传输状态显½Cºé¢æ?/span>(TransFilePanel)的数量ã€?/span>

2ã€?nbsp;从传输线½E‹åˆ—表中依次取出一个传输线½E‹ã€?/span>

3ã€?nbsp;判断当前取出的线½E‹æ˜¯å¦æœ‰å¯¹åº”的传输状态显½Cºé¢æ¿ï¼Œå¦‚果有执è¡?/span>5åQŒå¦‚果没有执è¡?/span>4ã€?/span>

4ã€?nbsp;增加传输状态显½Cºé¢æ¿ï¼Œòq¶ä¸”在主界面上增加选项卡ã€?/span>

5ã€?nbsp;判断传输¾U¿ç¨‹çš„状态,æ ÒŽ(gu¨©)®ä¸åŒçš„状态做不同的处理ã€?/span>

6ã€?nbsp;如果列表中的¾U¿ç¨‹å–完åQŒæ‰§è¡?/span>1åQŒæ²¡æœ‰å–完执è¡?/span>2ã€?/span>

½E‹åº‹¹ç¨‹å›¾ï¼š(x¨¬)



 

3åQ?/span>7åQ?/span>2 断点¾l­ä¼ 

软äšg支持断点¾l­ä¼ çš„功能,该功能主要算法如下:(x¨¬)

1ã€?nbsp;当文件传输中途停止时åQŒæ–‡ä»¶æŽ¥æ”¶è€…ç¨‹åºäØ“(f¨´)接收的文件创å»ÞZ¸€ä¸ªä»¥è¯¥æ–‡ä»¶å+.tmp为文件名的äÍ(f¨´)æ—¶æ–‡ä»Óž¼Œä¸´æ—¶æ–‡äšg与该文äšg保存在同一个èµ\径下。äÍ(f¨´)时文件中保存文äšg以传输的字节数和文äšg的大ž®ã€?/span>

2ã€?nbsp;当文件接收者接收该文äšgæ—Óž¼Œå¦‚果有对应的临时文äšgåQŒç¨‹åºä¼š(x¨¬)‹‚€‹¹‹åˆ°è¯¥æ–‡ä»¶çš„临时文äšgåQŒè¯»å–以传输的字节数和文件大ž®ï¼Œòq¶ä¸”比较传输的字节数与未完成传输的文件大ž®æ˜¯å¦ç›¸½{‰ï¼Œæ–‡äšg大小和发送来的文件大ž®æ˜¯å¦ç›¸½{‰ï¼Œå¦‚果都相½{‰ï¼Œæ‰§è¡Œ3åQŒå¦åˆ™æ‰§è¡?/span>4ã€?/span>

3ã€?nbsp;ž®†æ–‡ä»¶çš„输出‹¹è®¾¾|®åˆ°åº”该¾l§ç®‹ä¼ è¾“的位¾|®ï¼Œòq¶å°†èµ·å§‹ä¼ è¾“字节数发¾l™å‘送者,执行5ã€?/span>

4ã€?nbsp;如果有未完成的传输文ä»Óž¼Œž®†å…¶åˆ é™¤åQŒæ‰§è¡?/span>5ã€?/span>

5ã€?nbsp;˜q›è¡Œæ–‡äšg传输ã€?/span>

½E‹åº‹¹ç¨‹å›¾ï¼š(x¨¬)



ã€?br />  

3åQ?åQ?            本地端口的多˜qžæŽ¥ç›‘听

Server¾cÕd¯¹è±¡è´Ÿè´£æœ¬åœ°ç«¯å£çš„监听åQŒå¯ä»¥æ”¯æŒå¤šäº†è¿žæŽ¥ï¼Œå…·ä½“数量ç”Þq”¨æˆ¯‚®¾¾|®ã€?/span>

1ã€?span style="font: 7pt 'Times New Roman'">  用用戯‚®¾¾|®çš„端口创徏监听åQŒç­‰å¾…连接ã€?/span>

2ã€?span style="font: 7pt 'Times New Roman'">  当有用户˜qžæŽ¥ä¸ŠåŽåQŒç”¨è¯¥è¿žæŽ¥åˆ›å»ÞZ¸€ä¸?/span>SocketThread传输¾U¿ç¨‹åQŒåŠ å…¥åˆ°¾U¿ç¨‹åˆ—表ã€?/span>

3ã€?span style="font: 7pt 'Times New Roman'">  如果停止监听则退出,否则执行1ã€?/span>

½E‹åº‹¹ç¨‹å›¾ï¼š(x¨¬)



Rex Mao 2007-11-03 11:19 发表评论
]]>
准备开å·?/title><link>http://www.aygfsteel.com/RexMao/archive/2007/07/21/131596.html</link><dc:creator>Rex Mao</dc:creator><author>Rex Mao</author><pubDate>Sat, 21 Jul 2007 02:32:00 GMT</pubDate><guid>http://www.aygfsteel.com/RexMao/archive/2007/07/21/131596.html</guid><wfw:comment>http://www.aygfsteel.com/RexMao/comments/131596.html</wfw:comment><comments>http://www.aygfsteel.com/RexMao/archive/2007/07/21/131596.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/RexMao/comments/commentRss/131596.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/RexMao/services/trackbacks/131596.html</trackback:ping><description><![CDATA[<br>      ¾lè¿‡æ¯•业后的休息åQŒæ¥åˆîC¸Š‹¹·å·²¾lå¿«ä¸€ä¸ªæ˜ŸæœŸäº†åQŒæ€ÖM½“感觉一般,城市没有传说中那么现代,路上一æ ähœ‰ž®å¹¿å‘Šï¼Œä¸€æ ähœ‰äºÞZ¸èµîCh行横道,一æ ähœ‰ç ´ç ´çš„æ¥¼æˆ¿ï¼Œåœ°é“ç«™å¤–一æ ähœ‰é»‘èžR拉客。昨天去了外滩,才看到几处高æ¥û|¼Œä¸è¿‡æ€Žä¹ˆçœ‹ä¹Ÿæ²¡æœ‰ç”?sh¨´)视上放的那æ ähœ‰æ°”势。南京èµ\上老外˜q˜æ˜¯æ¯”较多(老外的眼¼œžå¾ˆ˜q¯‚Œ«åQ‰ã€?br>      å‘¨ä¸€ž®Þp¦å·¥ä½œäº†ï¼Œåˆè¦å›žåˆ°ä¸Žä»£ç äØ“(f¨´)伴的生活了,用键盘敲å‡ÞZ»¥åŽç¾Žå¥½çš„生活吧ã€?br>                                                                                                                                                     <img height=98 alt="" src="http://www.aygfsteel.com/images/blogjava_net/rexmao/keyboard.jpg" width=140 border=0> <img src ="http://www.aygfsteel.com/RexMao/aggbug/131596.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/RexMao/" target="_blank">Rex Mao</a> 2007-07-21 10:32 <a href="http://www.aygfsteel.com/RexMao/archive/2007/07/21/131596.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XMLçš„DOM解析器的java实现åQˆä¸‰åQ?¾c»è®¾è®?/title><link>http://www.aygfsteel.com/RexMao/archive/2007/05/31/121107.html</link><dc:creator>Rex Mao</dc:creator><author>Rex Mao</author><pubDate>Thu, 31 May 2007 03:32:00 GMT</pubDate><guid>http://www.aygfsteel.com/RexMao/archive/2007/05/31/121107.html</guid><wfw:comment>http://www.aygfsteel.com/RexMao/comments/121107.html</wfw:comment><comments>http://www.aygfsteel.com/RexMao/archive/2007/05/31/121107.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/RexMao/comments/commentRss/121107.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/RexMao/services/trackbacks/121107.html</trackback:ping><description><![CDATA[ <br><strong>¾c»è®¾è®?br><br></strong><span><span>    </span></span><span>软äšg中è“v关键作用的类ä¸?span>CharCollector</span>字符攉™›†å™¨ç±»ã€?span>SimpleDOMParser</span>解析内核¾cÕd’Œ<span>Manager</span>中间层控制类ã€?br><br><strong>字符攉™›†å™¨ç±»<br></strong><br></span> <p><img alt="" src="http://www.aygfsteel.com/images/blogjava_net/rexmao/CharCollector.jpg" border=0></p> <p><span>字符攉™›†å™¨ç±»æ˜¯èÊY件的底层¾c»ï¼Œå®ƒä¸Ž<span>XML</span>æ–‡äšg交互åQŒè¯»å–文件中的字½W¦ä¿¡æ¯ï¼Œ¾lè¿‡å¤„理åQŒåŞ成标½{¾ï¼Œæ–‡æœ¬åQŒå±žæ€§ç­‰æ•°æ®ä¸ÞZ¸Šå±‚提供服务ã€?/span></p> <p> </p> <p><span>成员变量介绍åQ?/span></p> <p><span>aReader:Reader</span><span>对象åQŒè¾“入流为文件输入流åQŒå®ƒ?y¨­u)?span>XML</span>æ–‡äšg的字½W¦æ•°æ®ä»¥‹¹çš„形式提供¾l™ç±»ã€?/span></p> <p><span>成员æ–ÒŽ(gu¨©)³•介绍åQ?/span></p> <p><span>comparedArray(): </span><span>输入åQšä¸¤ä¸?span>int</span>型数¾l„,输出åQ?span>boolean</span>型,˜q”回两个数组是否相同。用于比较两个数¾l„是否相同,在方法中åQŒå¯¹ä¸¤ä¸ªæ•°ç»„的数逐一比较ã€?/span></p> <p><span>hasMoreChars(): </span><span>输入åQšæ— åQŒè¾“出:(x¨¬)<span>boolean</span>型,表示文äšg中是否还有字½W¦ï¼Œè¯¥æ–¹æ³•用于确定文件中是否˜q˜æœ‰å­—符ã€?/span></p> <p><span>peek():<span>          </span></span><span>输入åQ?span>int</span>型数¾l„。用于存储窥探到的字½W¦ï¼Œè¾“出åQšæ— åQŒè¯¥æ–ÒŽ(gu¨©)³•用于从文件中½H¥æŽ¢æ•°ç»„长度的字½W¦æ•°æ®ã€‚窥探就是从文äšg中读取数据后åQŒå°†è¾“å…¥‹¹æ ‡è®°å›žä»¥å‰çš„位¾|®ï¼Œä»¥å…ä¸¢å¤±æ•°æ®ã€?/span></p> <p><span><span>                  </span></span><span>½Ž—法½Ž€˜qŽÍ¼š(x¨¬)</span></p> <p><span>åœ?span>aReader</span>上标记数¾l„的长度</span></p> <p><span>aReader.mark(buffer.length);</span></p> <p><span>2</span><span>、将数据依次è¯Õd…¥æ•°ç»„</span></p> <p><span>for (int i = 0; i < buffer.length; i++) {</span></p> <p><span><span>            </span>buffer[i] = aReader.read();</span></p> <p><span><span>        </span>}</span></p> <p><span>恢复<span>aReader</span></span></p> <p><span>aReader.reset();</span></p> <p><span>peek():<span>    </span></span><span>输入åQšæ— åQŒè¾“出:(x¨¬)<span>int</span>型,是窥探到的字½W¦ï¼Œè¯¥æ–¹æ³•从文äšg中窥探一个字½W¦æ•°æ®ã€?/span></p> <p><span>processCDATA(): </span><span>输入åQ?span>StringBuffer</span>型,用于存放<span>CDATA</span>数据åQŒè¾“出:(x¨¬)无,用于处理<span>XML</span>æ–‡äšg中的<span>CDATA</span>节点。得到的<span>CDATA</span>节点存放åˆ?span>StringBuffer</span>对象中ã€?/span></p> <p><span><span>    </span></span><span>½Ž—法½Ž€˜qŽÍ¼š(x¨¬)</span></p> <p><span>预设两个数组</span></p> <p><span>int[] cdataHead = {'<', '!', '[', 'C', 'D', 'A', 'T', 'A', '['};</span></p> <p><span>int[] cdataTail = {']', ']', '>'};</span></p> <p><span>½H¥æŽ¢<span>cdataHead</span>长度的字½W¦å­˜åœ¨æ•°¾l?span>buf</span>ä¸?/span></p> <p><span>peek(buf);</span></p> <p><span>比较<span>buf</span>ä¸?span>cdataHead</span>数组的内å®ÒŽ(gu¨©)˜¯å¦ç›¸åŒï¼Œå¦‚果不同˜q”回<span>falase,</span>如果相同¾l§ç®‹æ‰§è¡Œã€?/span></p> <p><span>ž®?span>aReader</span>è·Œ™¿‡<span>cdataHead</span>的长度,然后循环è¯Õd–直到½H¥æŽ¢çš„å­—½W¦æ•°¾l„与<span>cdataTail</span>相同åQŒå°†ä¸­é—´çš„å­—½W¦å­˜æ”‘Öˆ°<span>StringBuffer</span>对象中ã€?/span></p> <p><span>while (true) {</span></p> <p><span><span>                </span>peek(buf);</span></p> <p><span><span>                </span>if (comparedArray(buf, cdataTail)) {</span></p> <p><span><span>                    </span>aReader.skip(cdataTail.length);</span></p> <p><span><span>                    </span>flag = true;</span></p> <p><span><span>                    </span>break;</span></p> <p><span><span>        </span><span>        </span>} else {</span></p> <p><span><span>                    </span>bufChar = aReader.read();</span></p> <p><span><span>                    </span>if (bufChar == -1) {</span></p> <p><span><span>                        </span>throw new IOException("CDATA node without end tag");</span></p> <p><span><span>                    </span>}</span></p> <p><span><span>                    </span>sb.append((char) bufChar);</span></p> <p><span><span>      </span><span>          </span>}</span></p> <p><span>}</span></p> <p><span>processEntity(): </span><span>输入åQ?span>StringBuffer</span>型,用于存放实体数据åQŒè¾“出:(x¨¬)无,用语处理<span>XML</span>æ–‡äšg中的内徏实体¾cÕdž‹ã€‚得到的实体存放åˆ?span>StringBuffer</span>对象中ã€?/span></p> <p><span>readTag():<span> </span></span><span>输入åQšæ— åQŒè¾“出:(x¨¬)<span>String</span>型,是读到的标签åQŒä»Ž<span>XML</span>æ–‡äšgä¸­è¯»å–åÆˆæ•´ç†æˆä¸€ä¸ªæ ‡½{¾æ•°æ®å­˜æ”‘Öœ¨<span>String</span>对象中ã€?/span></p> <p><span><span>    </span></span><span>½Ž—法½Ž€˜qŽÍ¼š(x¨¬)</span></p> <p><span>½H¥æŽ¢ä¸€ä¸ªå­—½W¦ï¼Œå¦‚果不是<span>’<’</span>åQŒæŠ›å‡ºå¼‚常。否则ç‘ô¾l­æ‰§è¡Œã€?/span></p> <p><span>int nextChar = peek();</span></p> <p><span>if (nextChar != '<') {</span></p> <p><span><span>   </span>throw new IOException("expect '<',but got '" + (char) nextChar +"'");</span></p> <p><span>}</span></p> <p><span>½H¥æŽ¢ä¸€ä¸ªå­—½W?span>aChar</span></span></p> <p><span>int aChar = peek();</span></p> <p><span>如果字符ä¸?span>’<’</span>åQŒè¿›è¡?span>CDATA</span>节点处理</span></p> <p><span>if (aChar == '<') {</span></p> <p><span><span>                </span>if (processCDATA(sb)) {</span></p> <p><span><span>                    </span>aChar = peek();</span></p> <p><span><span>                    </span>continue;</span></p> <p><span><span>                </span>}</span></p> <p><span>}</span></p> <p><span> </span><span>如果字符ä¸?span>’&’</span>åQŒè¿›è¡Œå†…建实体处ç?/span></p> <p><span>if (aChar == '&') {</span></p> <p><span><span>                </span>if (processEntity(sb)) {</span></p> <p><span><span>                    </span>aChar = peek();</span></p> <p><span><span>                    </span>continue;</span></p> <p><span><span>                </span>}</span></p> <p><span>}</span></p> <p><span> </span><span>如果字符ä¸?span>’>’</span>或文件结束,˜q”回<span>StringBuffer</span>对象ã€?/span></p> <p><span><span>    </span> </span><span>如果是其它字½W¦ï¼ŒåŠ å…¥åˆ?span>StringBuffer</span>对象中ã€?/span></p> <p><span>readText():<span>   </span></span><span>输入åQšæ— åQŒè¾“出:(x¨¬)<span>String</span>型,是读到的文本内容åQŒä»Ž<span>XML</span>æ–‡äšgä¸­è¯»å–åÆˆæ•´ç†æˆä¸€ä¸ªæ–‡æœ¬æ•°æ®å­˜æ”‘Öœ¨<span>Sting</span>对象中ã€?/span></p> <p><span>skipOtherTag():<span>   </span></span><span>输入åQšæ— åQŒè¾“出:(x¨¬)无,跌™¿‡ä¸€ä¸ªä¸å¤„理的标½{¾ã€?/span></p> <p><span>skipOtherTags(): </span><span>输入åQšæ— åQŒè¾“出:(x¨¬)无,跌™¿‡å¤šä¸ªä¸å¤„理的标签ã€?/span></p> <p><span>skipWhitespace():</span><span>输入åQšæ— åQŒè¾“出:(x¨¬)无,跌™¿‡½Iºæ ¼ã€?br><br><strong>解析内核¾c?br></strong><br></span></p> <p><img height=310 alt="" src="http://www.aygfsteel.com/images/blogjava_net/rexmao/SimpleDOMParser.jpg" width=242 border=0></p> <p><span><span>    </span></span>该类用于解析<span>XML</span>æ–‡äšgåQŒåŒ…å?span>parser()</span>æ–ÒŽ(gu¨©)³•åQŒæ˜¯è¯¥ç±»çš„æ ¸å¿ƒæ–¹æ³•ã€?/p> <p> </p> <p><span>成员变量介绍åQ?/span></p> <p><span>aCharCollector:CharCollector</span><span>¾cÕd¯¹è±¡ï¼Œè´Ÿè´£å­—符攉™›†ã€?/span></p> <p><span>currentNode: SimpleElement</span><span>¾cÕd¯¹è±¡ï¼Œè¡¨ç¤ºå½“前处理的元素ã€?/span></p> <p><span>Elements:<span>     </span>Stack</span><span>¾cÕd¯¹è±¡ï¼Œç”¨æ ˆçš„存储结构,表示元素之间的层‹Æ¡å…³¾p…R€?/span></p> <p><span>成员æ–ÒŽ(gu¨©)³•介绍åQ?/span></p> <p><span>Parser():<span>     </span></span><span>输入åQšæ— åQŒè¾“出:(x¨¬)<span>SimpleDocument</span>¾cÕd¯¹è±¡ï¼Œæ˜¯è¿”回的整个文æ¡£æ ?w¨¨i)åž‹¾l“æž„ã€?/span></p> <p><span><span>              </span> </span><span>½Ž—法½Ž€˜qŽÍ¼š(x¨¬)</span></p> <p><span><span>1ã€?/span></span><span>è¯Õd–一个标½{?/span></p> <p><span><span>2ã€?/span></span><span>判断是开始标½{¾è¿˜æ˜¯ç»“束标½{¾ï¼Œå¦‚果是结束标½{¾ï¼Œè½¬å…¥¾l“束标签处理<span>3</span></span></p> <p><span>如果是开始标½{¾ï¼Œè½¬å…¥å¼€å§‹æ ‡½{‘Ö¤„ç?span>6</span></span></p> <p><span><span>3ã€?/span></span><span>得到标签的名¿UŽÍ¼Œåˆ¤æ–­æ˜¯å¦ä¸?span>currentNode</span>的名¿U°ç›¸åŒï¼Œå¦‚果相同åQŒæ‰§è¡?/span></p> <p><span>4</span><span>åQŒå¦åˆ™æŠ›å‡ºå¼‚å¸?/span></p> <p><span><span>4ã€?/span></span><span>判断是否˜q˜æœ‰æ ‡ç­¾åQŒå¦‚果有¾l§ç®‹æ‰§è¡Œ<span>5</span>åQŒå¦åˆ™é€€å‡ºã€?/span></p> <p><span><span>5ã€?/span></span><span>从栈中弹å‡ÞZ¸€ä¸ªèŠ‚ç‚¹ç»™<span>currentNode</span>åQŒæ‰§è¡?span>1</span></span></p> <p><span><span>6ã€?/span></span><span>得到标签的名¿UŽÍ¼Œå±žæ€§ï¼Œæ–‡æœ¬å†…容åQŒå°†æ ‡ç­¾åŠ å…¥åˆ?span>DOM</span>æ ?w¨¨i)中åQŒåƈ且压栈ã€?/span></p> <p><span>执行<span>1</span></span></p> <p><span>½Ž—法的程序流½E‹å›¾<br><br><img height=612 alt="" src="http://www.aygfsteel.com/images/blogjava_net/rexmao/liuchenttu.jpeg" width=562 border=0><br><br><strong>中间层管理类<br></strong><br></span></p> <p><img height=335 alt="" src="http://www.aygfsteel.com/images/blogjava_net/rexmao/Manager.jpg" width=251 border=0></p> <p>中间层管理类用于控制和协调解析器与用æˆïL(f¨¥ng)•Œé¢ã€?/p> <p> </p> <p><span>成员变量介绍åQ?/span></p> <p><span>isParsered: boolean</span><span>型,判断是否已经解析˜q‡äº†ã€?/span></p> <p><span>document: SimpleDocument</span><span>型对象,表示整个<span>XML</span>文档æ ?w¨¨i),也是解析器返回的ã€?/span></p> <p><span>parser:<span>       </span>SimpleDOMParser</span><span>型对象,表示解析器ã€?/span></p> <p><span>成员æ–ÒŽ(gu¨©)³•介绍åQ?/span></p> <p><span>getTreeRoot(): </span><span>输入åQšæ— åQŒè¾“出:(x¨¬)<span>DefaultMutableTreeNode</span>型对象,是得到的æ ?w¨¨i)的根节点,用于得到树(w¨¨i)的根节炏V€?/span></p> <p><span>parser(): <span>   </span></span><span>输入åQšæ— åQŒè¾“出:(x¨¬)无,用于执行解析操作ã€?/span></p> <p><span>setInputStream(): </span><span>输入åQ?span>InputStream</span>型对象,是要讄¡½®çš„输入流åQŒè¾“出:(x¨¬)无,用于讄¡½®è§£æžæºã€?/span></p> <p><span>setXMLFile()</span><span>åQ?span><span>    </span> </span>输入åQ?span>File</span>型对象,是要讄¡½®çš?span>XML</span>æ–‡äšgåQŒè¾“出:(x¨¬)无,用于讄¡½®<span>XML</span>æ–‡äšg源ã€?/span></p> <p><span>getTreeNode():<span>    </span> </span><span>输入åQ?span>SimpleElement</span>型对象,是要转换的对象,输出åQ?span>DefaultMutableTreeNode</span>型对象,是è{换后的对象,ç”?/span></p> <p><span>于è{æ¢ç›¸åº”å…ƒç´ äØ“(f¨´)æ ?w¨¨i)的节点对象ã€?/span></p> <p> </p> <img src ="http://www.aygfsteel.com/RexMao/aggbug/121107.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/RexMao/" target="_blank">Rex Mao</a> 2007-05-31 11:32 <a href="http://www.aygfsteel.com/RexMao/archive/2007/05/31/121107.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XMLçš„DOM解析器的java实现åQˆäºŒåQ?½E‹åº¾l“构设计http://www.aygfsteel.com/RexMao/archive/2007/05/27/120276.htmlRex MaoRex MaoSun, 27 May 2007 05:10:00 GMThttp://www.aygfsteel.com/RexMao/archive/2007/05/27/120276.htmlhttp://www.aygfsteel.com/RexMao/comments/120276.htmlhttp://www.aygfsteel.com/RexMao/archive/2007/05/27/120276.html#Feedback1http://www.aygfsteel.com/RexMao/comments/commentRss/120276.htmlhttp://www.aygfsteel.com/RexMao/services/trackbacks/120276.html¾l“构设计

各个¾cȝš„功能介绍

Node�/span>Element�/span>Document�/span>Attr�/span>W3C�/span>DOM规范要求实现的接口。还有其它接口未列出�/span>

SimpleNode ¾l§æ‰¿Node接口åQŒå®žçŽ?/span>Node接口的基本功能ã€?/span>

 

SimpleElement¾l§æ‰¿Nodeå’?/span>Element接口åQŒå¯¹åº?/span>DOMæ ?w¨¨i)中的标准节点,也就æ?/span>XMLæ–‡äšg中的一个标½{¾ã€?/span>

 

SimpleDocument ¾l§æ‰¿Nodeå’?/span>Document接口åQŒå¯¹åº”æ•´ä¸?/span>DOMæ ?w¨¨i),它是解析器解析完成后åQŒè¿”回的对象。用户可以ä‹É用该对象讉K—®æ•´ä¸ªDOMæ ?w¨¨i)ã€?/span>

 

SimpleAttr ¾l§æ‰¿Nodeå’?/span>Attr接口åQŒå¯¹åº?/span>DOMæ ?w¨¨i)中的属性节点,用于存放属性名¿U°å’Œå±žæ€§å€¹{€?/span>

 

CharCollector 字符攉™›†å™¨ç±»åQŒå®ƒç›´æŽ¥ä¸?/span>XMLæ–‡äšg接触åQŒæ ¹æ®éœ€è¦å‘调用者提供下一个标½{¾æˆ–文本½{‰æ•°æ®ã€?/span>

 

SimpleDOMParser 解析器的核心¾c»ï¼Œå®ƒä‹Éç”?/span>CharCollector¾c»ï¼Œå¾—到标签、文本等数据。ä‹Éç”?/span>SimpleElementã€?/span>SimpleAttr½{‰ç±»å­˜æ”¾æ•°æ®åQŒç”Ÿæˆ?/span>SimpleDocumnet对象˜q”回¾l™è°ƒç”¨è€…ã€?/span>

 

MainFrame 用户界面¾c»ï¼Œå®ƒå°†è§£æž¾l“果展示¾l™ç”¨æˆøP¼Œòq¶ä¸”æ ÒŽ(gu¨©)®ç”¨æˆ·çš„æ“ä½œï¼Œä¸Žç”¨æˆ¯‚¿›è¡Œäº¤äº’ã€?/span>

 

Manager 中间层管理类åQŒå®ƒåè°ƒç”¨æˆ·ç•Œé¢åQ?/span>MainFrameåQ‰ä¸Žè§£æžå™¨å†…æ ?/span>(SimpleDOMParser)之间的关¾p»ï¼Œå®žçŽ°è§£æžå™¨çš„æŽ§åˆ¶ã€?/span>

 

内部接口设计

¾cÕd¿U?/span>

调用¾c?/span>

调用功能

SimpleDOMParser

SimpleElement

节点的存储,查找åQŒåˆ é™¤ã€?/span>

SimpleDOMParser

SimpleAttr

属性节点的存储åQŒæŸ¥æ‰¾ï¼Œåˆ é™¤ã€?/span>

SimpleDOMParser

SimpleDocument

生成DOM�/span>

SimpleDomParser

CharCollector

字符攉™›†åQŒå¾—到标½{¾ä¸Žæ–‡æœ¬½{‰ã€?/span>

Manager

SimpleDOMParser

解析XML文档

Manager

MainFrame

用户界面的相å…Ïx“ä½?/span>

 

用例关系设计

用例介绍

用户åQ?/span>          å‚与者, åŒ™ÊY件的使用者ã€?/span>

XMLæ–‡äšgåQ?/span>       参与者,XMLæ–‡äšgã€?/span>

链接的文ä»Óž¼š(x¨¬)    参与者,XMLæ–‡äšg中链接的外部文äšgã€?/span>

选择XMLæ–‡äšgåQ?/span> ç”¨æˆ·é€šè¿‡æ–‡äšg选择框选择一个本地的XMLæ–‡äšgã€?/span>

选择URL地址åQ?/span> ç”¨æˆ·è¾“入一个有效的URLåQŒæŒ‡å‘网¾lœä¸Šçš?/span>XML格式的网™åüc(di¨£n)€?/span>

解析XMLæ–‡äšgåQ?/span> ç”¨æˆ·¼‹®å®šå¯?/span>XMLæ–‡äšg˜q›è¡Œè§£æžåQŒè¯¥™åÒŽ(gu¨©)“ä½œè¦å‘生在选择XMLæ–‡äšg或选择URL地址之后ã€?/span>

修改文äšgåQ?/span>        ç”¨æˆ·å¯?/span>XMLæ–‡äšg˜q›è¡Œä¿®æ”¹

保存文äšgåQ?/span>        ç”¨æˆ·é€šè¿‡æ–‡äšg选择框,选择位置保存XMLæ–‡äšgã€?/span>

选择DOMæ ?w¨¨i)节点ï¼?x¨¬)用户选择解析后的DOMæ ?w¨¨i)åž‹¾l“构上的节点ã€?/span>

解析器解析:(x¨¬)     è§£æžå™¨å¯¹XML˜q›è¡Œè§£æž

攉™›†å­—符åQ?/span>        å­—符攉™›†å™¨è´Ÿè´£å¤„ç?/span>XML的字½W¦æ•°æ?/span>

界面展示åQ?/span>        é€šè¿‡æ ?w¨¨i)åž‹¾l“构和图表向用户展示数据ã€?/span>

 

字符攉™›†å™¨æœ‰é™çŠ¶æ€æœº

DFA M=åQ?/span>{S,Ts,Tp,Tq,Cp,Ep,Er,Q},{LT,RT,A,C,EC,,EOF,NL,NLRA},f,S,{Q}åQ?/span>

 

其中 字符集:(x¨¬)

LT={<}

RT={/>}

A={&amp,&lt,&gt,&apos,&qout}

C={<!CDATA[[}

EC={]]>}

EOF代表文äšg¾l“束

NL代表不是<的字½W?/span>

NLRA 代表除去LT,RT,LTL,A,C的所有字½W?/span>

 

状态:(x¨¬)

SåQ?/span> 开始状æ€?/span>

TsåQšæ ‡½{‘Ö¤„理开始状æ€?/span>

TpåQšæ ‡½{‘Ö¤„理状æ€?/span>

TqåQšæ ‡½{‘Ö¤„理结束状æ€?/span>

CpåQ?/span>CDATA节点处理状æ€?/span>

EpåQšå†…建实体处理状æ€?/span>

EråQšé”™è¯¯çжæ€?/span>

QåQšç»“束状æ€?/span>

 

状态è{换函敎ͼš(x¨¬)

 

f(S,LT)=Ts

f(S,NL)=Er

f(Tp,RT)=Tq

f(Tp,A)=Cp

f(Tp,C)=Ep

f(Ep,EC)=Tp

f(Ep,EOF)=Er

f(Tq,LT)=Ts

f(Tq,EOF)=Q

f(Tq,NLRA)=Tq

 



Rex Mao 2007-05-27 13:10 发表评论
]]>
java中怎样把图片存攑֜¨ä»£ç ä¸?/title><link>http://www.aygfsteel.com/RexMao/archive/2007/05/26/120139.html</link><dc:creator>Rex Mao</dc:creator><author>Rex Mao</author><pubDate>Sat, 26 May 2007 02:15:00 GMT</pubDate><guid>http://www.aygfsteel.com/RexMao/archive/2007/05/26/120139.html</guid><wfw:comment>http://www.aygfsteel.com/RexMao/comments/120139.html</wfw:comment><comments>http://www.aygfsteel.com/RexMao/archive/2007/05/26/120139.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.aygfsteel.com/RexMao/comments/commentRss/120139.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/RexMao/services/trackbacks/120139.html</trackback:ping><description><![CDATA[  <p><span>有时候不æƒÏxŠŠå›„¡‰‡èµ„源攑֜¨ç›®å½•里,让用æˆïL(f¨¥ng)œ‹åˆŽÍ¼Œæˆ‘用的方法是ž®†å›¾ç‰‡çš„像素矩阵存在代码里。可能比较笨åQŒå…·ä½“做法是åQ?/span></p> <p><span>MediaTracker mt = new MediaTracker(aFrame); //</span><span>媒体跟踪å™?/span></p> <p><span>Image img = Toolkit.getDefaultToolkit().createImage("</span><span>ç”Õdˆ·</span><span>.jpg"); //</span><span>得到囄¡‰‡</span></p> <p><span>mt.addImage(img, 1);</span></p> <p><span>try {</span></p> <p><span> <span>     </span>mt.waitForAll();</span></p> <p><span><span>   </span>}</span></p> <p><span>catch (InterruptedException ex) {</span></p> <p><span><span>   </span>}</span></p> <p><span>BufferedImage bi = new BufferedImage(16, 16, BufferedImage.TYPE_INT_RGB);</span></p> <p><span>bi.getGraphics().drawImage(img, 0, 0, 16, 16, f);</span></p> <p><span>int[] rbg = new int[bi.getWidth() * bi.getHeight()];</span></p> <p><span>bi.getRGB(0, 0, 16, 16, rbg, 0, 16); //</span><span>利用</span><span>BufferedImage</span><span>得到像素矩阵</span></p> <p><span>for (int i = 0; i < rbg.length; i++) {</span></p> <p><span><span>      </span>System.out.print(rbg[i] + ","); //</span><span>打印</span></p> <p><span><span>   </span>}</span></p> <p> </p> <p><span>再在代码中创建静态对è±?/span></p> <p><span>private static int[] penPixels = {</span></p> <p><span><span>      </span>16777215, 16777215, 16777215, 16777215, 16777215, 16777215, 16777215,</span></p> <p><span><span>      </span>16777215, 16777215, 16777215, 16777215, 16777215, 16777215, 16777215,</span></p> <p><span><span>      </span>16777215, 16777215,</span></p> <p><span><span>      </span>16777215, 16777215, 16777215, 16777215, 16777215, 16777215, 16777215,</span></p> <p><span><span>      </span>16777215, 16777215, -16777216, -16777216, -16777216, 16777215, 16777215,</span></p> <p><span><span>      </span>16777215, 16777215,</span></p> <p><span><span>      </span>16777215, 16777215, 16777215, 16777215, 16777215, 16777215, 16777215,</span></p> <p><span><span>      </span>16777215, -16777216, -2031616, -2031616, -2031616, -16777216, 16777215,</span></p> <p><span><span>      </span>16777215, 16777215,</span></p> <p><span><span>      </span>16777215, 16777215, 16777215, 16777215, 16777215, 16777215, 16777215,</span></p> <p><span><span>      </span>16777215, -16777216, -2031616, -1, 16777215, -16777216, 16777215,</span></p> <p><span><span>      </span>16777215, 16777215,</span></p> <p><span><span>      </span>16777215, 16777215, 16777215, 16777215, 16777215, 16777215, 16777215,</span></p> <p><span><span>      </span>-16777216, -16777216, -2031616, -1, -16777216, 16777215, 16777215,</span></p> <p><span><span>      </span>16777215, 16777215,</span></p> <p><span><span>      </span>16777215, 16777215, 16777215, 16777215, 16777215, 16777215, 16777215,</span></p> <p><span><span>      </span>-16777216, -256, -16777216, -16777216, -16777216, 16777215, 16777215,</span></p> <p><span><span>      </span>16777215, 16777215,</span></p> <p><span><span>      </span>16777215, 16777215, 16777215, 16777215, 16777215, 16777215, -16777216,</span></p> <p><span><span>      </span>-256, -1, -1842205, -16777216, 16777215, 16777215, 16777215, 16777215,</span></p> <p><span><span>      </span>16777215,</span></p> <p><span><span>      </span>16777215, 16777215, 16777215, 16777215, 16777215, 16777215, -16777216, -1,</span></p> <p><span><span>      </span>-256, -16777216, -16777216, 16777215, 16777215, 16777215, 16777215,</span></p> <p><span><span>      </span>16777215,</span></p> <p><span> <span>     </span>16777215, 16777215, 16777215, 16777215, 16777215, -16777216, 16777215,</span></p> <p><span><span>      </span>-256, -1842205, -16777216, 16777215, 16777215, 16777215, 16777215,</span></p> <p><span><span>      </span>16777215, 16777215,</span></p> <p><span><span>      </span>16777215, 16777215, 16777215, 16777215, 16777215, -16777216, -256, -1,</span></p> <p><span><span>    </span><span>  </span>-16777216, -16777216, 16777215, 16777215, 16777215, 16777215, 16777215,</span></p> <p><span><span>      </span>16777215,</span></p> <p><span><span>      </span>16777215, 16777215, 16777215, 16777215, -16777216, -256, -1, -1842205,</span></p> <p><span><span>      </span>-16777216, 16777215, 16777215, 16777215, 16777215, 16777215, 16777215,</span></p> <p><span><span>      </span>16777215,</span></p> <p><span><span>      </span>16777215, 16777215, 16777215, 16777215, -16777216, -16777216, -256,</span></p> <p><span><span>      </span>-16777216, -16777216, 16777215, 16777215, 16777215, 16777215, 16777215,</span></p> <p><span><span>      </span>16777215, 16777215,</span></p> <p><span><span>      </span>16777215, 16777215, 16777215, 16777215, -16777216, -16777216, -16777216,</span></p> <p><span><span>      </span>-16777216, 16777215, 16777215, 16777215, 16777215, 16777215, 16777215,</span></p> <p><span><span>      </span>16777215, 16777215,</span></p> <p><span><span>      </span>16777215, 16777215, 16777215, 16777215, -16777216, -16777216, -16777216,</span></p> <p><span><span>      </span>16777215, 16777215, 16777215, 16777215, 16777215, 16777215, 16777215,</span></p> <p><span><span>      </span>16777215, 16777215,</span></p> <p><span><span>      </span>16777215, 16777215, 16777215, 16777215, -16777216, -16777216, 16777215,</span></p> <p><span><span>      </span>16777215, 16777215, 16777215, 16777215, 16777215, 16777215, 16777215,</span></p> <p><span><span>      </span>16777215, 16777215,</span></p> <p><span><span>      </span>16777215, 16777215, 16777215, 16777215, -16777216, 16777215, 16777215,</span></p> <p><span><span>      </span>16777215, 16777215, 16777215, 16777215, 16777215, 16777215, 16777215,</span></p> <p><span><span>      </span>16777215, 16777215</span></p> <p><span> };//</span><span>打印出来的矩é˜?/span></p> <p><span>private static MemoryImageSource misPen = new MemoryImageSource(16, 16,</span></p> <p><span><span>      </span>penPixels, 0, 16);</span></p> <p><span>public static Image imgPen = Toolkit.getDefaultToolkit().createImage(misPen);</span></p> <p><span>˜q™æ ·ž®±å¯ä»¥ç›´æŽ¥ä‹Éç”?/span><span>imgPen</span><span>囄¡‰‡äº†ã€?/span></p> <img src ="http://www.aygfsteel.com/RexMao/aggbug/120139.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/RexMao/" target="_blank">Rex Mao</a> 2007-05-26 10:15 <a href="http://www.aygfsteel.com/RexMao/archive/2007/05/26/120139.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>xmlçš„DOM解析器的java实现 åQˆä¸€åQ?DOM规范½Ž€ä»?/title><link>http://www.aygfsteel.com/RexMao/archive/2007/05/23/119304.html</link><dc:creator>Rex Mao</dc:creator><author>Rex Mao</author><pubDate>Wed, 23 May 2007 01:13:00 GMT</pubDate><guid>http://www.aygfsteel.com/RexMao/archive/2007/05/23/119304.html</guid><wfw:comment>http://www.aygfsteel.com/RexMao/comments/119304.html</wfw:comment><comments>http://www.aygfsteel.com/RexMao/archive/2007/05/23/119304.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/RexMao/comments/commentRss/119304.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/RexMao/services/trackbacks/119304.html</trackback:ping><description><![CDATA[  <p><span>˜q™æ˜¯æˆ‘的毕业设计åQŒæœ¬æ¥ä»¥ä¸ºæŒº½Ž€å•çš„åQŒåšäº†ä»¥åŽå‘现还是能学到点知识,发来¾l™å¤§å®¶ä¸€èµ·å­¦ä¹?f¨¤n)ã€?/span></p> <p><span>DOM</span><span>规范定义了一¾l„接口,用户通过˜q™äº›æŽ¥å£æ¥è®¿é—?/span><span>DOM</span><span>解析器返回的æ ?w¨¨i)åž‹¾l“æž„ã€?/span><span>DOM</span><span>不同äº?/span><span>SAX</span><span>的事仉™©±åŠ¨æ¨¡å¼ï¼Œå®ƒæ˜¯ž®†æ•´ä¸ªæ–‡æ¡£è§£æžå®ŒæˆåŽåQŒåŞ成一个树(w¨¨i)型结构放在内存中。下面是</span><span>DOM</span><span>规范中的所有接口,灰色昄¡¤ºçš„æ˜¯æœ¬è§£æžå™¨å®žçŽ°çš„æŽ¥å£ã€?br><img style="WIDTH: 582px; HEIGHT: 438px" height=438 alt="" src="http://www.aygfsteel.com/images/blogjava_net/rexmao/DOM.JPG" width=582 border=0></span></p>   <p><span>DOMImplementation</span></p> <p><span>DOMImplementation</span><span>接口允许代码讉K—®</span><span>DOM</span><span>的具体实玎ͼŒä»¥æ‰¾å‡ºå¯¹å„种ç‰ÒŽ(gu¨©)€§çš„æœ‰æ•ˆæ”¯æŒã€‚其中的</span><span>hasFeature(String feature, String version)</span><span>æ–ÒŽ(gu¨©)³•可以‹¹‹è¯•具体çš?/span><span>DOM</span><span>实现是否支持某特性ã€?/span></p> <p> </p> <p><span>NodeList</span></p> <p><span>NodeList</span><span>对象æ˜?/span><span>Node</span><span>对象的一个简单的有序集合。例如,可以用来存放一个节点的子节炏V€?/span></p> <p> </p> <p><span>Node</span></p> <p><span>Node</span><span>对象æ˜?/span><span>DOM</span><span>中所有节点的基对象ã€?/span><span>Element</span><span>ã€?/span><span>Attr</span><span>ã€?/span><span>Text</span><span>ã€?/span><span>CDATASection</span><span>ã€?/span><span>EntityReference</span><span>ã€?/span><span>Entity</span><span>ã€?/span><span>ProcessingInstruction</span><span>ã€?/span><span>Comment</span><span>ã€?/span><span>Document</span><span>ã€?/span><span>DocumentType</span><span>ã€?/span><span>DocumentFragment</span><span>å’?/span><span>Notation</span><span>对象都派生于</span><span>Node</span><span>对象ã€?/span></p> <p> </p> <p><span>NamedNodeMap</span></p> <p><span>NamedNodeMap</span><span>对象是可以通过猛成讉K—®çš?/span><span>Node</span><span>对象集合。可以用来存放节点的属性ã€?/span></p> <p> </p> <p><span>DOMException</span></p> <p><span>异常接口</span></p> <p> </p> <p><span>DocumentFragment</span></p> <p><span>DocumentFragment</span><span>对象是文档片ŒDµï¼Œæ˜¯æ–‡æ¡£ï¼ˆ</span><span>Document</span><span>åQ‰å¯¹è±¡çš„一个简单的版本。它可以用来表示文档的ä“Q意子æ ?w¨¨i)ã€?/span></p> <p> </p> <p><span>Document</span></p> <p><span>Document</span><span>对象是能åœ?/span><span>DOM</span><span>½CÞZ¾‹çš„主要对象。它代表整个çš?/span><span>xml</span><span>文档åQŒä¹Ÿæ˜¯è§£æžå™¨˜q”回的对象ã€?/span></p> <p> </p> <p><span>Element</span></p> <p><span>Element</span><span>对象包含文档中的元素的信息。代表一个标½{¾ã€?/span></p> <p> </p> <p><span>Attr</span></p> <p><span>Attr</span><span>是属性对象,一个节点的属性存åœ?/span><span>NamedNodeMap</span><span>里ã€?/span></p> <p> </p> <p><span>CharacterData</span></p> <p><span>CharacterData</span><span>对象表示</span><span>xml</span><span>æ–‡äšg中的字符信息ã€?/span></p> <p> </p> <p><span>DocumentType</span></p> <p><span>DocumentType</span><span>对象表示文æ¡£¾cÕdž‹åQŒä¹Ÿž®±æ˜¯</span><span>DTD</span><span>声明里的内容ã€?/span></p> <p> </p> <p><span>Notation</span></p> <p><span>Notation</span><span>对象表示</span><span>DTD</span><span>声明中的关于表示法的信息ã€?/span></p> <p> </p> <p><span>Entity</span></p> <p><span>Entity</span><span>对象包含</span><span>DTD</span><span>中有兛_®žä½“的信息ã€?/span></p> <p> </p> <p><span>EntityReference</span></p> <p><span>EntityReference</span><span>对象包含对已解析文档中的实体的引用信息ã€?/span></p> <p> </p> <p><span>ProcessingInstruction</span></p> <p><span>ProcessingInstruction</span><span>对象包含文档中内嵌的处理指ä×o(h¨´)的信息ã€?/span></p> <p> </p> <p><span>Text</span></p> <p><span>Text</span><span>对象表示节点的文本数据ã€?/span></p> <p> </p> <p><span>Comment</span></p> <p><span>Comment</span><span>对象表示注释ã€?/span></p> <p> </p> <p><span>CDATASection</span></p> <p><span>CDATASection</span><span>对象包含文本中未被解析块的内宏V€?/span></p> <img src ="http://www.aygfsteel.com/RexMao/aggbug/119304.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/RexMao/" target="_blank">Rex Mao</a> 2007-05-23 09:13 <a href="http://www.aygfsteel.com/RexMao/archive/2007/05/23/119304.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java 调用本地文äšghttp://www.aygfsteel.com/RexMao/archive/2007/05/15/117511.htmlRex MaoRex MaoTue, 15 May 2007 01:45:00 GMThttp://www.aygfsteel.com/RexMao/archive/2007/05/15/117511.htmlhttp://www.aygfsteel.com/RexMao/comments/117511.htmlhttp://www.aygfsteel.com/RexMao/archive/2007/05/15/117511.html#Feedback3http://www.aygfsteel.com/RexMao/comments/commentRss/117511.htmlhttp://www.aygfsteel.com/RexMao/services/trackbacks/117511.html我看了一下Windows XP/NT¾pȝ»Ÿçš„调用,ž®±æ˜¯å†™æˆRuntime.getRuntime.exec("cmd /c start "+url);


Rex Mao 2007-05-15 09:45 发表评论
]]>
javaç”Õd›¾½E‹åºæŠ€æœ¯å°¾l“(三) ç”Õd›¾çš„鼠标事件处ç?/title><link>http://www.aygfsteel.com/RexMao/archive/2007/04/24/113260.html</link><dc:creator>Rex Mao</dc:creator><author>Rex Mao</author><pubDate>Tue, 24 Apr 2007 09:07:00 GMT</pubDate><guid>http://www.aygfsteel.com/RexMao/archive/2007/04/24/113260.html</guid><wfw:comment>http://www.aygfsteel.com/RexMao/comments/113260.html</wfw:comment><comments>http://www.aygfsteel.com/RexMao/archive/2007/04/24/113260.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/RexMao/comments/commentRss/113260.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/RexMao/services/trackbacks/113260.html</trackback:ping><description><![CDATA[<p><span>ç”Õd›¾çš„鼠标事件处理是ç”Õd›¾½E‹åºä¸­æ¯”较复杂的内容åQŒè¿™é‡Œåªæ˜¯ç®€å•介¾lï¼Œæœ‰å…´­‘£çš„可以看程序ã€?/span><span><br>         Point p0,p1;//</span><span>记录拖拽ç”Õd›¾çš„è“v点和¾lˆç‚¹</span><span><br>         p0=new Point();<br>         p1=new Point();<br>         //</span><span>鼠标按下åQŒä¸»è¦è®°å½•按下的ç‚?/span><span><br>         void jPaneDraw_mousePressed(MouseEvent e) {<br>            p0=new Point(e.getX(),e.getY());<br>}<br>         //</span><span>鼠标拖拽˜q‡ç¨‹åQŒæ ¹æ®ä¸åŒçš„囑ÖÅžåQŒç”»å‡ºæ‹–拽过½E‹çš„囑ÖÅžåQŒå¤æ‚图形可以用矩åŞ代替</span><span><br>         void jPaneDraw_mouseDragged(MouseEvent e) {<br>         switch(toolMode){<br>         case 0:{ //</span><span>直线</span><span><br>       p1.x = e.getX();<br>        p1.y = e.getY();<br>        g.setColor(col);<br>        g.drawLine(p0.x, p0.y, p1.x, p1.y);<br>        jPaneDraw.repaint();<br>        break;<br>   }<br>         ...//</span><span>其它囑ÖÅž</span><span><br>}<br>}<br>//</span><span>鼠标抬è“våQŒæ ¹æ?/span><span>p0</span><span>å’?/span><span>p1</span><span>生成对应的图å½?/span><span><br>void jPaneDraw_mouseReleased(MouseEvent e) {<br>   switch(toolMode){<br>case 0:{ //</span><span>直线</span><span><br>         CusLine2D aCusShape = new CusLine2D(p0.x, p0.y, p1.x, p1.y); //</span><span>建立囑ÖÅž</span><span><br>         ...//</span><span>ž®†å›¾å½¢åŠ å…¥åˆ°å›‘ÖŞ列表</span><span><br>         break;<br>}<br>         ...//</span><span>其它囑ÖÅž</span><span><br>}<br>         jPaneDraw.repaint();<br>}</span></p> <img src ="http://www.aygfsteel.com/RexMao/aggbug/113260.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/RexMao/" target="_blank">Rex Mao</a> 2007-04-24 17:07 <a href="http://www.aygfsteel.com/RexMao/archive/2007/04/24/113260.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javaç”Õd›¾½E‹åºæŠ€æœ¯å°¾l“(二) 重绘与双¾~“冲http://www.aygfsteel.com/RexMao/archive/2007/04/23/113040.htmlRex MaoRex MaoMon, 23 Apr 2007 13:47:00 GMThttp://www.aygfsteel.com/RexMao/archive/2007/04/23/113040.htmlhttp://www.aygfsteel.com/RexMao/comments/113040.htmlhttp://www.aygfsteel.com/RexMao/archive/2007/04/23/113040.html#Feedback1http://www.aygfsteel.com/RexMao/comments/commentRss/113040.htmlhttp://www.aygfsteel.com/RexMao/services/trackbacks/113040.html         ¾l™å‡º½W¬ä¸€¿Uçš„java实现
         aã€?/font>  定义后台图象BufferedImage offScreenImg=offScreenImg = new BufferedImage(this.maxX, this.maxY,
                                     BufferedImage.TYPE_INT_RGB);

         bã€?/font>  得到后台çš?/span>Graphics实例

    Graphics2D offScreenG;

        offScreenG = offScreenImg.createGraphics();

         cã€?/font>  覆盖paintComponentæ–ÒŽ(gu¨©)³•

     public void paintComponent(Graphics g) {

          super.paintComponent(g);

        g.drawImage(offScreenImg, 0, 0, this.maxX, this.maxY, this);

          }

        ¾l˜åˆ¶æ—¶ç”¨åŽå°GraphicsåQŒç»˜åˆ¶å¥½åŽï¼Œè°ƒç”¨repaint()åQŒå°†offScreenImg¾l˜åˆ°é¢æ¿ä¸Šã€?/span>




]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º ¸·ÄÏÏØ| ´óÒ¦ÏØ| ËçÖÐÏØ| ´ÈϪÊÐ| ºÍÆ½Çø| ÓñÁÖÊÐ| ²ýÍ¼ÏØ| ¿ËÀ­ÂêÒÀÊÐ| ÂåÔúÏØ| Çø¡£| ¹«Ö÷ÁëÊÐ| ³É¶¼ÊÐ| ̨ÄÏÏØ| ÖÐÄþÏØ| ÓñÌïÏØ| »áÄþÏØ| ³¤ÖÎÏØ| º£ÑôÊÐ| ½ú½­ÊÐ| äüÄÏÏØ| ÏÃÃÅÊÐ| ¡»¯ÏØ| ³àË®ÊÐ| °²ÒåÏØ| ºÏÑôÏØ| æÄÔ´ÏØ| ÂÞµéÏØ| ˫ѼɽÊÐ| ¹ãºÓÏØ| ½ð̳ÊÐ| ÏæÒõÏØ| ÎäÍþÊÐ| ºôºÍºÆÌØÊÐ| ʯÚäÏØ| ¡»¯ÏØ| ˾·¨| ºªµ¦ÊÐ| ´ó¸ÛÇø| ºÓ½òÊÐ| ÌìÃÅÊÐ| ¹ó¶¨ÏØ|