<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>dreamstone</title>
    <description></description>
    <link>http://dreamstone.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>ant中文手册 2.0版 (教程) </title>
        <author>dreamstone</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dreamstone.javaeye.com">dreamstone</a>&nbsp;
          链接：<a href="http://dreamstone.javaeye.com/blog/159438" style="color:red;">http://dreamstone.javaeye.com/blog/159438</a>&nbsp;
          发表时间: 2008年01月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近又用到ant了，所以更新一下ant中文手册，新版本<br />修订了1.1版本的格式，增加了很多task的内容，拿出来共享吧。<br />下边是个大概的目录，因为临时做的可能文字和排版上还有些问题，见谅。<br /><br />下载地址:<a href="http://www.blogjava.net/Files/dreamstone/ant3.rar " target="_blank">http://www.blogjava.net/Files/dreamstone/ant3.rar </a><br />1.    Ant介绍... 3<br /><br />1.1.         什么是ant 3<br /><br />1.2.         什么是构建... 3<br /><br />1.3.         ant的好处... 4<br /><br />1.4.         ant的兄弟make. 4<br /><br />2.    Ant 安装... 4<br /><br />2.1.         到http://ant.apache.org/bindownload.cgi 4<br /><br />2.2.         如图新增系统变量... 4<br /><br />2.3.         3、测试安装... 5<br /><br />3.    第一个Ant脚本... 6<br /><br />3.1.         使用ant来达成目的，完成一件事情的实例... 6<br /><br />3.2.         然后用ant完成剩下的步骤。... 6<br /><br />3.3.         解释上边的配置文件... 7<br /><br />4.    整合ant 8<br /><br />1,自己重新写一个build.xml ，这将是一个麻烦的事情... 8<br /><br />4.1.         举个例子：... 9<br /><br />5.    Ant进阶... 10<br /><br />6.    Ant常用task. 13<br /><br />6.1.         使用classpath. 14<br /><br />6.2.         设置classpath. 14<br /><br />6.3.         输出信息... 14<br /><br />6.3.1.      写法一... 14<br /><br />6.3.2.      写法二... 14<br /><br />6.3.3.      输出一段xml 15<br /><br />6.4.         引入一个xml文件... 15<br /><br />6.5.         拷贝文件... 15<br /><br />6.5.1.      拷贝一个文件... 15<br /><br />6.5.2.      拷贝一个文件到指定目录... 15<br /><br />6.5.3.      拷贝一个目录到另一个目录... 15<br /><br />6.5.4.      拷贝一个文件集合到一个目录... 15<br /><br />6.5.5.      拷贝一个文件集合到一个目录，同时建立备份文件... 15<br /><br />6.5.6.      拷贝一个集合的文件到一个目录，并替换掉@ TITLE @.. 15<br /><br />6.5.7.      拷贝一个目录下的东西到另一个目录下，(includes加入，excludes排除) 16<br /><br />6.5.8.      拷贝一个文件... 16<br /><br />6.6.       删除文件、目录... 16<br /><br />6.6.1.           删除一个文件... 16<br /><br />6.6.2.           删除一个目录... 16<br /><br />6.6.3.           删除所有符合规则的文件(.bak文件)包括子目录... 16<br /><br />6.6.4.           删除当前目录下所有的文件和目录，包括当前目录... 16<br /><br />6.6.5.           删除当前目录下所有的文件和目录，不包括当前目录... 16<br /><br />6.6.6.      删除当前目录下所有的svn相关文件... 16<br /><br />6.6.7.      删除文件目录树... 16<br /><br />6.7.         剪切文件... 17<br /><br />6.8.         重命名... 17<br /><br />6.9.         建立临时文件... 17<br /><br />6.10.       Touch的使用... 17<br /><br />6.10.1.    如果文件不存在,创建文件，如果存在,更改最后访问时间为当前系统时间... 17<br /><br />6.10.2.    如果文件不存在,创建文件，更改最后访问时间为06/28/2000 2:02 pm.. 17<br /><br />6.10.3.    更改目录下所有文件最后访问时间为06/28/2000 2:02 pm.. 17<br /><br />6.11.       Condition的使用... 17<br /><br />6.12.       替换replace. 18<br /><br />6.13.       调用chmod. 18<br /><br />6.14.       checksum MD5运算... 18<br /><br />6.14.1.    md5文件，然后把值放入foo.bar.MD5属性... 18<br /><br />6.14.2.    md5文件，然后把值放入foobarMD5属性... 18<br /><br />6.14.3.    Md5目录下的所有文件，然后建立一个.md5文件，把所有的md5值放入... 19<br /><br />6.15.       Available的使用... 19<br /><br />6.15.1.    如果类存在，则设置属性Myclass.present为true，如果没有就false. 19<br /><br />6.15.2.    如果文件存在则设置属性jaxp.jar.presen为true，否则为false. 19<br /><br />6.15.3.    如果目录存在，则设置属性为true，否则为false. 19<br /><br />6.15.4.    如果classpath下寻找class，如果存在则设置属性为true，否则为false. 19<br /><br />6.15.5.    如果在classpath下发现文件则设置属性为true否则为flase. 19<br /><br />6.16.       设置property. 19<br /><br />6.16.1.    设置属性name-value. 19<br /><br />6.16.2.    读取属性文件中的属性配置... 19<br /><br />6.16.3.    读取网络中的property-set 20<br /><br />6.16.4.    读取文件中的属性配置... 20<br /><br />6.16.5.    读取环境变量... 20<br /><br />6.16.6.    读取属性文件中的属性，并作为全局引用... 20<br /><br />6.17.       出现一个错误... 20<br /><br />6.17.1.    显示错误方式一... 20<br /><br />6.17.2.    显示错误方式二... 20<br /><br />6.17.3.    如果这个属性不存在显示错误... 20<br /><br />6.17.4.    如果这个属性存在现实错误... 20<br /><br />6.17.5.    如果符合条件显示错误，这里的条件是（没有设置属性）... 20<br /><br />6.18.       建立一个目录... 20<br /><br />6.19.       打jar包... 20<br /><br />6.20.       打Ear包... 21<br /><br />6.21.       执行程序... 21<br /><br />6.22.       运行jar包：... 21<br /><br />6.22.1.    带参数执行... 21<br /><br />6.22.2.    或者设置一下运行的jvm的最大内存，来运行... 21<br /><br />6.23.       编译程序... 22<br /><br />6.24.       制作Javadoc. 22<br /><br />6.25.       定义一个新的task类库... 22<br /><br />6.26.       运行sql 22<br /><br />6.27.       Filter的使用... 23<br /><br />6.27.1.    把所有的@year@替换成2000. 23<br /><br />6.27.2.    替换属性文件中的内容... 23<br /><br />6.28.       Length的使用... 23<br /><br />6.28.1.    把字符串”foo”的长度保存到属性"length.foo"中... 23<br /><br />6.28.2.    把文件” bar”的长度保存到属性" length.bar "中... 23<br /><br />6.29.       输入Input 23<br /><br />6.30.       FixCRCL的使用... 23<br /><br />6.30.1.    替换所有的eol变成lf ，删除所有的eof 23<br /><br />6.30.2.    替换eol成crlf 设置tab的长度为4. 23<br /><br />6.31.       发送邮件... 24<br /><br />6.32.       压缩、解压缩... 24<br /><br />6.32.1.    解压缩zip文件... 24<br /><br />6.32.2.    压缩zip文件... 24<br /><br />6.32.3.    打tar包... 24<br /><br />6.32.4.    解tar包... 25<br /><br />6.33.       打war包：... 25<br /><br />6.34.       antcall 25<br /><br />6.34.1.    调用target  doSomethingElse. 25<br /><br />6.34.2.    拷贝父中的path1，然后再当前工程中命名为path2. 25<br /><br />6.35.       Ant的使用... 26<br /><br />6.35.1.    调用目录sub1/sub2/下的build.xml 26<br /><br />6.35.2.    同上，不同的写法... 26<br /><br />6.35.3.    同上，不同的写法... 26<br /><br />6.35.4.    调用指定文件中的指定target (compile) 26<br /><br />7.    在ant中控制流程(if else ) 27<br /><br />8.    实例分析: 27<br /><br />9.    如何继续学习... 31<br /><br />10.          Ant使用cvs的实例... 31<br /><br />11.          QA：... 32<br /><br />11.1.       如果执行ant过程中出现Outofmemory的错误怎么办？    32
          <br/><br/>
          <span style="color:red;">
            <a href="http://dreamstone.javaeye.com/blog/159438#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jan 2008 21:27:03 +0800</pubDate>
        <link>http://dreamstone.javaeye.com/blog/159438</link>
        <guid>http://dreamstone.javaeye.com/blog/159438</guid>
      </item>
      <item>
        <title>file的getPath getAbsolutePath和getCanonicalPath的不同</title>
        <author>dreamstone</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dreamstone.javaeye.com">dreamstone</a>&nbsp;
          链接：<a href="http://dreamstone.javaeye.com/blog/118020" style="color:red;">http://dreamstone.javaeye.com/blog/118020</a>&nbsp;
          发表时间: 2007年08月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          file的这几个取得path的方法各有不同，下边说说详细的区别<br />
<br />
概念上的区别：（内容来自jdk，个人感觉这个描述信息，只能让明白的人明白，不明白的人看起来还是有点难度（特别试中文版，英文版稍好些)所以在概念之后我会举例说明。如果感觉看概念很累就跳过直接看例子吧。看完例子回来看概念会好些。<br />
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /><span style="COLOR: #000000">getPath<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;String&nbsp;getPath()将此抽象路径名转换为一个路径名字符串。所得到的字符串使用默认名称分隔符来分隔名称序列中的名称。&nbsp;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />返回：<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />此抽象路径名的字符串形式<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /></span></div>
<br />
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /><span style="COLOR: #000000">getAbsolutePath<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;String&nbsp;getAbsolutePath()返回抽象路径名的绝对路径名字符串。&nbsp;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />如果此抽象路径名已经是绝对路径名，则返回该路径名字符串，这与&nbsp;getPath()&nbsp;方法一样。如果此抽象路径名是空的抽象路径名，则返回当前用户目录的路径名字符串，该目录由系统属性&nbsp;user.dir&nbsp;指定。否则，使用与系统有关的方式分析此路径名。在&nbsp;UNIX&nbsp;系统上，通过根据当前用户目录分析某一相对路径名，可使该路径名成为绝对路径名。在&nbsp;Microsoft&nbsp;Windows&nbsp;系统上，通过由路径名指定的当前驱动器目录（如果有）来分析某一相对路径名，可使该路径名成为绝对路径名；否则，可以根据当前用户目录来分析它。&nbsp;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />返回：<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />绝对路径名字符串，它与此抽象路径名表示相同的文件或目录的&nbsp;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />抛出：&nbsp;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />SecurityException&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;如果无法访问所需的系统属性值。<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />另请参见：<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />isAbsolute()<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /></span></div>
<br />
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /><span style="COLOR: #000000">getCanonicalPath<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;String&nbsp;getCanonicalPath()<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;IOException返回抽象路径名的规范路径名字符串。&nbsp;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />规范路径名是绝对路径名，并且是惟一的。规范路径名的准确定义与系统有关。如有必要，此方法首先将路径名转换成绝对路径名，这与调用&nbsp;getAbsolutePath()&nbsp;方法的效果一样，然后用与系统相关的方式将它映射到其惟一路径名。这通常涉及到从路径名中移除多余的名称（比如&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">&nbsp;和&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">..</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">）、分析符号连接（对于&nbsp;UNIX&nbsp;平台），以及将驱动器名转换成标准大小写形式（对于&nbsp;Microsoft&nbsp;Windows&nbsp;平台）。&nbsp;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />表示现有文件或目录的每个路径名都有一个惟一的规范形式。表示非存在文件或目录的每个路径名也有一个惟一的规范形式。非存在文件或目录路径名的规范形式可能不同于创建文件或目录之后同一路径名的规范形式。同样，现有文件或目录路径名的规范形式可能不同于删除文件或目录之后同一路径名的规范形式。&nbsp;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />返回：<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />表示与此抽象路径名相同的文件或目录的规范路径名字符串&nbsp;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />抛出：&nbsp;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />IOException&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;如果发生&nbsp;I</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">O&nbsp;错误（可能是因为构造规范路径名需要进行文件系统查询）&nbsp;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />SecurityException&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;如果无法访问所需的系统属性值，或者存在安全管理器，且其&nbsp;SecurityManager.checkRead(java.io.FileDescriptor)&nbsp;方法拒绝对该文件进行读取访问<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />从以下版本开始：&nbsp;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />JDK1.</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /></span></div>
<br />
二、例子：<br />
1，getPath()与getAbsolutePath()的区别<br />
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" id="Codehighlighter1_26_412_Open_Image" onclick="this.style.display='none'; Codehighlighter1_26_412_Open_Text.style.display='none'; Codehighlighter1_26_412_Closed_Image.style.display='inline'; Codehighlighter1_26_412_Closed_Text.style.display='inline';" align="top" alt="" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" id="Codehighlighter1_26_412_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_26_412_Closed_Text.style.display='none'; Codehighlighter1_26_412_Open_Image.style.display='inline'; Codehighlighter1_26_412_Open_Text.style.display='inline';" align="top" alt="" style="DISPLAY: none" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;test1()</span><span id="Codehighlighter1_26_412_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_26_412_Open_Text"><span style="COLOR: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;file1&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;File(</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">.\\test1.txt</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;file2&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;File(</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">D:\\workspace\\test\\test1.txt</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">-----默认相对路径：取得路径不同------</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(file1.getPath());<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(file1.getAbsolutePath());<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">-----默认绝对路径:取得路径相同------</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(file2.getPath());<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(file2.getAbsolutePath());<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<br />
得到的结果：<br />
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /><span style="COLOR: #000000">-----</span><span style="COLOR: #000000">默认相对路径：取得路径不同</span><span style="COLOR: #000000">------</span><span style="COLOR: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />.\test1.txt<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />D:\workspace\test\.\test1.txt<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #000000">-----</span><span style="COLOR: #000000">默认绝对路径:取得路径相同</span><span style="COLOR: #000000">------</span><span style="COLOR: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />D:\workspace\test\test1.txt<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />D:\workspace\test\test1.txt</span></div>
因为getPath()得到的是构造file的时候的路径。<br />
getAbsolutePath()得到的是全路径<br />
如果构造的时候就是全路径那直接返回全路径<br />
如果构造的时候试相对路径，返回当前目录的路径+构造file时候的路径<br />
<br />
2，getAbsolutePath()和getCanonicalPath()的不同<br />
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" id="Codehighlighter1_43_189_Open_Image" onclick="this.style.display='none'; Codehighlighter1_43_189_Open_Text.style.display='none'; Codehighlighter1_43_189_Closed_Image.style.display='inline'; Codehighlighter1_43_189_Closed_Text.style.display='inline';" align="top" alt="" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" id="Codehighlighter1_43_189_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_43_189_Closed_Text.style.display='none'; Codehighlighter1_43_189_Open_Image.style.display='inline'; Codehighlighter1_43_189_Open_Text.style.display='inline';" align="top" alt="" style="DISPLAY: none" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;test2()&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;Exception</span><span id="Codehighlighter1_43_189_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_43_189_Open_Text"><span style="COLOR: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;file&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;File(</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">..\\src\\test1.txt</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(file.getAbsolutePath());<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(file.getCanonicalPath());<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
得到的结果<br />
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /><span style="COLOR: #000000">D:\workspace\test\..\src\test1.txt<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />D:\workspace\src\test1.txt</span></div>
可以看到CanonicalPath不但是全路径，而且把..或者.这样的符号解析出来。<br />
3,getCanonicalPath()和自己的不同。<br />
就是解释这段话:<br />
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /><span style="COLOR: #000000">表示现有文件或目录的每个路径名都有一个惟一的规范形式。表示非存在文件或目录的每个路径名也有一个惟一的规范形式。非存在文件或目录路径名的规范形式可能不同于创建文件或目录之后同一路径名的规范形式。同样，现有文件或目录路径名的规范形式可能不同于删除文件或目录之后同一路径名的规范形式。&nbsp;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /></span></div>
单下边这段代码是看不到结果的，要配合一定的操作来看。下边操作步骤，同时讲解<br />
<br />
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" id="Codehighlighter1_43_135_Open_Image" onclick="this.style.display='none'; Codehighlighter1_43_135_Open_Text.style.display='none'; Codehighlighter1_43_135_Closed_Image.style.display='inline'; Codehighlighter1_43_135_Closed_Text.style.display='inline';" align="top" alt="" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" id="Codehighlighter1_43_135_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_43_135_Closed_Text.style.display='none'; Codehighlighter1_43_135_Open_Image.style.display='inline'; Codehighlighter1_43_135_Open_Text.style.display='inline';" align="top" alt="" style="DISPLAY: none" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;test3()&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;Exception</span><span id="Codehighlighter1_43_135_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_43_135_Open_Text"><span style="COLOR: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;file&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;File(</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">D:\\Text.txt</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(file.getCanonicalPath());<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
步骤：<br />
确定你的系统是Windows系统。<br />
(1),确定D盘下没有Text.txt这个文件，直接执行这段代码，得到的结果是:<br />
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /><span style="COLOR: #000000">D:\Text.txt</span></div>
注意这里试大写的Text.txt<br />
(2)在D盘下建立一个文件，名叫text.txt，再次执行代码，得到结果<br />
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /><span style="COLOR: #000000">D:\text.txt</span></div>
同样的代码得到不同的结果。<br />
同时可以对比getAbsolutePath()看看，这个得到的结果是一样的。<br />
<br />
原因：<br />
window是大小写不敏感的，也就是说在windows上test.txt和Test.txt是一个文件，所以在windows上当文件不存在时，得到的路径就是按照输入的路径。但当文件存在时，就会按照实际的情况来显示。这也就是建立文件后和删除文件后会有不同的原因。文件夹和文件类似。<br />
<br />
三、最后：<br />
1，尝试在linux下执行上边的步骤，两次打印的结果是相同的，因为linux是大小写敏感的系统。<br />
2，手动删掉test.txt,然后尝试执行下边代码<br />
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" id="Codehighlighter1_43_287_Open_Image" onclick="this.style.display='none'; Codehighlighter1_43_287_Open_Text.style.display='none'; Codehighlighter1_43_287_Closed_Image.style.display='inline'; Codehighlighter1_43_287_Closed_Text.style.display='inline';" align="top" alt="" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" id="Codehighlighter1_43_287_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_43_287_Closed_Text.style.display='none'; Codehighlighter1_43_287_Open_Image.style.display='inline'; Codehighlighter1_43_287_Open_Text.style.display='inline';" align="top" alt="" style="DISPLAY: none" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;test4()&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;Exception</span><span id="Codehighlighter1_43_287_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_43_287_Open_Text"><span style="COLOR: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;file&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;File(</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">D:\\Text.txt</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(file.getCanonicalPath());<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;file1&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;File(</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">D:\\text.txt</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file1.createNewFile();<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;File(</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">D:\\Text.txt</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(file.getCanonicalPath());<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<br />
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" id="Codehighlighter1_43_203_Open_Image" onclick="this.style.display='none'; Codehighlighter1_43_203_Open_Text.style.display='none'; Codehighlighter1_43_203_Closed_Image.style.display='inline'; Codehighlighter1_43_203_Closed_Text.style.display='inline';" align="top" alt="" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" id="Codehighlighter1_43_203_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_43_203_Closed_Text.style.display='none'; Codehighlighter1_43_203_Open_Image.style.display='inline'; Codehighlighter1_43_203_Open_Text.style.display='inline';" align="top" alt="" style="DISPLAY: none" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;test3()&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;Exception</span><span id="Codehighlighter1_43_203_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_43_203_Open_Text"><span style="COLOR: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;file1&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;File(</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">D:\\text.txt</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file1.createNewFile();<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;file&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;File(</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">D:\\Text.txt</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(file.getCanonicalPath());<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
执行上边两个函数，看看结果，然后思考一下为什么？<br />
1,的结果是两个大写，<br />
2,的结果试两个小写<br />
连续两个大写的，是否跟上边的矛盾 ？<br />
这是因为虚拟机的缓存机制造成的。第一次File&nbsp;file&nbsp;<span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;File(</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">D:\\Text.txt</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">);决定了结果.</span>
          <br/><br/>
          <span style="color:red;">
            <a href="http://dreamstone.javaeye.com/blog/118020#comments" style="color:red;">已有 <strong>1</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 29 Aug 2007 17:19:25 +0800</pubDate>
        <link>http://dreamstone.javaeye.com/blog/118020</link>
        <guid>http://dreamstone.javaeye.com/blog/118020</guid>
      </item>
      <item>
        <title>webwork iterator 遍历双重list </title>
        <author>dreamstone</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dreamstone.javaeye.com">dreamstone</a>&nbsp;
          链接：<a href="http://dreamstone.javaeye.com/blog/118016" style="color:red;">http://dreamstone.javaeye.com/blog/118016</a>&nbsp;
          发表时间: 2007年08月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          经常会需要遍历双层的list，可以用脚本语言，但如果想用标签的话，<br />
一直没有找到很好的做法，偶尔从朋友得到答案，下边是个例子：<br />
构造一个双层列表：<br />
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /><span style="COLOR: #000000">outList&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;ArrayList();<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />inList</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;ArrayList();<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />inList.add(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Element(</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">));<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />inList.add(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Element(</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">));<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />outList.add(inList);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />inList</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;ArrayList();<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />inList.add(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Element(</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">c</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">));<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />inList.add(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Element(</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">d</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">));<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />outList.add(inList);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />遍历：<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">ww:iterator&nbsp;value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">outList</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">ww:iterator&nbsp;value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">top</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">ww:&nbsp;property&nbsp;value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">key</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">/&gt;</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">ww:&nbsp;property&nbsp;value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">value</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">/&gt;</span><span style="COLOR: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">ww:iterator</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">ww:iterator</span><span style="COLOR: #000000">&gt;</span></div>
<br />
<br />
注意：关键点就一个top，意思是取栈顶的元素.
          <br/><br/>
          <span style="color:red;">
            <a href="http://dreamstone.javaeye.com/blog/118016#comments" style="color:red;">已有 <strong>1</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 29 Aug 2007 17:16:22 +0800</pubDate>
        <link>http://dreamstone.javaeye.com/blog/118016</link>
        <guid>http://dreamstone.javaeye.com/blog/118016</guid>
      </item>
      <item>
        <title>hibernate的两种事务管理jdbc 和jta方式</title>
        <author>dreamstone</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dreamstone.javaeye.com">dreamstone</a>&nbsp;
          链接：<a href="http://dreamstone.javaeye.com/blog/118014" style="color:red;">http://dreamstone.javaeye.com/blog/118014</a>&nbsp;
          发表时间: 2007年08月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          hibernate的两种事务管理jdbc 和jta方式。下边说说两者的区别<br />
一、说明一下jdbc和jta方式事务管理的区别：<br />
JDBC事务由Connnection管理，也就是说，事务管理实际上是在JDBC Connection<br />
中实现。事务周期限于Connection的生命周期之内<br />
<br />
JTA 事务管理则由 JTA 容器实现，JTA 容器对当前加入事务的众多Connection 进<br />
行调度，实现其事务性要求。JTA的事务周期可横跨多个JDBC Connection生命周期。<br />
<br />
二、在了解jdbc和jta事务的基础上，再来讨论hibernate的两种事务<br />
对于基于JDBC Transaction的Hibernate 事务管理机制而言，事务管理在Session 所依托的JDBC Connection<br />
中实现，事务周期限于Session的生命周期。<br />
<br />
对于基于JTA事务的Hibernate而言，JTA事务横跨可横跨多个Session。<br />
三、hibernate中写法的不同<br />
<br />
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /><span style="COLOR: #000000">jdbc的写法<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" id="Codehighlighter1_30_180_Open_Image" onclick="this.style.display='none'; Codehighlighter1_30_180_Open_Text.style.display='none'; Codehighlighter1_30_180_Closed_Image.style.display='inline'; Codehighlighter1_30_180_Closed_Text.style.display='inline';" align="top" alt="" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" id="Codehighlighter1_30_180_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_30_180_Closed_Text.style.display='none'; Codehighlighter1_30_180_Open_Image.style.display='inline'; Codehighlighter1_30_180_Open_Text.style.display='inline';" align="top" alt="" style="DISPLAY: none" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;saveUser()</span><span id="Codehighlighter1_30_180_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_30_180_Open_Text"><span style="COLOR: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;sessionFactory.openSession();<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;tx&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;session.beginTransaction();<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;session.save(user);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;tx.commit();<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;session.close();<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />}</span></span><span style="COLOR: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />必须在session.close()之前commit或者rollback<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />jta写法<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" id="Codehighlighter1_248_495_Open_Image" onclick="this.style.display='none'; Codehighlighter1_248_495_Open_Text.style.display='none'; Codehighlighter1_248_495_Closed_Image.style.display='inline'; Codehighlighter1_248_495_Closed_Text.style.display='inline';" align="top" alt="" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" id="Codehighlighter1_248_495_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_248_495_Closed_Text.style.display='none'; Codehighlighter1_248_495_Open_Image.style.display='inline'; Codehighlighter1_248_495_Open_Text.style.display='inline';" align="top" alt="" style="DISPLAY: none" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;saveUser()</span><span id="Codehighlighter1_248_495_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_248_495_Open_Text"><span style="COLOR: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;sessionFactory.openSession();<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;tx&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;session.beginTransaction();<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;session.save(user);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;session.close();<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session1&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;sessionFactory.openSession();<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;session1.save(user1);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;session.close();<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;tx.commit();<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />}</span></span><span style="COLOR: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />commit和rollback可以在session.close()之后执行.<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />同时应该注意的一点是，事务是不能嵌套的，在使用jta的事务的情况下，如果要让一个事务跨越两个<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" />session,则必须在两个session的外层开始事务和完成事务。而不能再在session内部开始事务和完成事务。</span></div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://dreamstone.javaeye.com/blog/118014#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 29 Aug 2007 17:14:00 +0800</pubDate>
        <link>http://dreamstone.javaeye.com/blog/118014</link>
        <guid>http://dreamstone.javaeye.com/blog/118014</guid>
      </item>
      <item>
        <title>hibernate的各种保存方式的区别 (save,persis,update,saveOrUpdte,merge等)</title>
        <author>dreamstone</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dreamstone.javaeye.com">dreamstone</a>&nbsp;
          链接：<a href="http://dreamstone.javaeye.com/blog/106497" style="color:red;">http://dreamstone.javaeye.com/blog/106497</a>&nbsp;
          发表时间: 2007年07月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><a href="http://www.blogjava.net/dreamstone/archive/2007/07/29/133071.html" id="_11dfed91f747_HomePageDays_DaysList_ctl00_DayItem_DayList_ctl01_TitleUrl">hibernate的各种保存方式的区别 (save,persis,update,saveOrUpdte,merge,flush,lock)等</a><br />
hibernate对于对象的保存提供了太多的方法，他们之间有很多不同，这里细说一下，以便区别：<br />
一、预备知识：<br />
在所有之前，说明一下，对于hibernate，它的对象有三种状态，transient、persistent、detached<br />
下边是常见的翻译办法：<br />
transient：瞬态或者自由态<br />
persistent：持久化状态<br />
detached：脱管状态或者游离态</p>
<p>脱管状态的实例可以通过调用save()、persist()或者saveOrUpdate()方法进行持久化。<br />
持久化实例可以通过调用 delete()变成脱管状态。通过get()或load()方法得到的实例都是持久化状态的。<br />
脱管状态的实例可以通过调用 update()、0saveOrUpdate()、lock()或者replicate()进行持久化。</p>
<p>save()和persist()将会引发SQL的INSERT，delete()会引发SQLDELETE，<br />
而update()或merge()会引发SQLUPDATE。对持久化（persistent）实例的修改在刷新提交的时候会被检测到，<br />
它也会引起SQLUPDATE。saveOrUpdate()或者replicate()会引发SQLINSERT或者UPDATE</p>
<p>二、save 和update区别<br />
把这一对放在第一位的原因是因为这一对是最常用的。<br />
save的作用是把一个新的对象保存<br />
update是把一个脱管状态的对象保存</p>
<p>三,update 和saveOrUpdate区别<br />
这个是比较好理解的，顾名思义，saveOrUpdate基本上就是合成了save和update<br />
引用hibernate reference中的一段话来解释他们的使用场合和区别<br />
通常下面的场景会使用update()或saveOrUpdate()： <br />
程序在第一个session中加载对象 <br />
该对象被传递到表现层 <br />
对象发生了一些改动 <br />
该对象被返回到业务逻辑层 <br />
程序调用第二个session的update()方法持久这些改动 </p>
<p>saveOrUpdate()做下面的事: <br />
如果对象已经在本session中持久化了，不做任何事 <br />
如果另一个与本session关联的对象拥有相同的持久化标识(identifier)，抛出一个异常 <br />
如果对象没有持久化标识(identifier)属性，对其调用save() <br />
如果对象的持久标识(identifier)表明其是一个新实例化的对象，对其调用save() <br />
如果对象是附带版本信息的（通过<version></version>或<timestamp></timestamp>） 并且版本属性的值表明其是一个新实例化的对象，save()它。 <br />
否则update() 这个对象 </p>
<p>四,persist和save区别<br />
这个是最迷离的一对，表面上看起来使用哪个都行，在hibernate reference文档中也没有明确的区分他们.<br />
这里给出一个明确的区分。（可以跟进src看一下，虽然实现步骤类似，但是还是有细微的差别）<br />
这里参考<a href="http://opensource.atlassian.com/projects/hibernate/browse/HHH-1682">http://opensource.atlassian.com/projects/hibernate/browse/HHH-1682</a>中的一个说明：<br />
---------------------------------------------------------------------------------<br />
I found that a lot of people have the same doubt. To help to solve this issue <br />
I'm quoting Christian Bauer:<br />
&quot;In case anybody finds this thread...</p>
<p>persist() is well defined. It makes a transient instance persistent. However, <br />
it doesn't guarantee that the identifier value will be assigned to the persistent <br />
instance immediately, the assignment might happen at flush time. The spec doesn't say <br />
that, which is the problem I have with persist().</p>
<p>persist() also guarantees that it will not execute an INSERT statement if it is <br />
called outside of transaction boundaries. This is useful in long-running conversations <br />
with an extended Session/persistence context.A method like persist() is required.</p>
<p>save() does not guarantee the same, it returns an identifier, and if an INSERT <br />
has to be executed to get the identifier (e.g. &quot;identity&quot; generator, not &quot;sequence&quot;), <br />
this INSERT happens immediately, no matter if you are inside or outside of a transaction. This is not good in a long-running conversation with an extended Session/persistence context.&quot;</p>
<p>---------------------------------------------------------------------------------<br />
简单翻译一下上边的句子的主要内容：<br />
1，persist把一个瞬态的实例持久化，但是并&quot;不保证&quot;标识符被立刻填入到持久化实例中，标识符的填入可能被推迟<br />
到flush的时间。</p>
<p>2，persist&quot;保证&quot;，当它在一个transaction外部被调用的时候并不触发一个Sql Insert，这个功能是很有用的，<br />
当我们通过继承Session/persistence context来封装一个长会话流程的时候，一个persist这样的函数是需要的。</p>
<p>3，save&quot;不保证&quot;第2条,它要返回标识符，所以它会立即执行Sql insert，不管是不是在transaction内部还是外部</p>
<p><br />
五,saveOrUpdateCopy,merge和update区别<br />
首先说明merge是用来代替saveOrUpdateCopy的，这个详细见这里<br />
<a href="http://www.blogjava.net/dreamstone/archive/2007/07/28/133053.html">http://www.blogjava.net/dreamstone/archive/2007/07/28/133053.html</a><br />
然后比较update和merge<br />
update的作用上边说了，这里说一下merge的<br />
如果session中存在相同持久化标识(identifier)的实例，用用户给出的对象的状态覆盖旧有的持久实例 <br />
如果session没有相应的持久实例，则尝试从数据库中加载，或创建新的持久化实例,最后返回该持久实例 <br />
用户给出的这个对象没有被关联到session上，它依旧是脱管的 <br />
重点是最后一句：<br />
当我们使用update的时候，执行完成后，我们提供的对象A的状态变成持久化状态<br />
但当我们使用merge的时候，执行完成，我们提供的对象A还是脱管状态，hibernate或者new了一个B，或者检索到<br />
一个持久对象B，并把我们提供的对象A的所有的值拷贝到这个B，执行完成后B是持久状态，而我们提供的A还是托管状态</p>
<p>六,flush和update区别<br />
这两个的区别好理解<br />
update操作的是在脱管状态的对象<br />
而flush是操作的在持久状态的对象。<br />
默认情况下，一个持久状态的对象是不需要update的，只要你更改了对象的值，等待hibernate flush就自动<br />
保存到数据库了。hibernate flush发生再几种情况下：<br />
1，调用某些查询的时候<br />
2，transaction commit的时候<br />
3，手动调用flush的时候 </p>
<p>七,lock和update区别<br />
update是把一个已经更改过的脱管状态的对象变成持久状态<br />
lock是把一个没有更改过的脱管状态的对象变成持久状态<br />
对应更改一个记录的内容，两个的操作不同：<br />
update的操作步骤是：<br />
（1）更改脱管的对象-&gt;调用update<br />
lock的操作步骤是：<br />
(2)调用lock把对象从脱管状态变成持久状态--&gt;更改持久状态的对象的内容--&gt;等待flush或者手动flush</p>
<p>参考内容：<br />
<a href="http://www.blogjava.net/iamtin/archive/2006/03/06/33910.aspx">http://www.blogjava.net/iamtin/archive/2006/03/06/33910.aspx</a><br />
<a href="http://opensource.atlassian.com/projects/hibernate/browse/HHH-1682">http://opensource.atlassian.com/projects/hibernate/browse/HHH-1682</a><br />
<a href="http://www.redsaga.com/hibernate-ref/3.x/zh-cn/html/objectstate.html">http://www.redsaga.com/hibernate-ref/3.x/zh-cn/html/objectstate.html</a></p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://dreamstone.javaeye.com/blog/106497#comments" style="color:red;">已有 <strong>1</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 29 Jul 2007 00:57:04 +0800</pubDate>
        <link>http://dreamstone.javaeye.com/blog/106497</link>
        <guid>http://dreamstone.javaeye.com/blog/106497</guid>
      </item>
      <item>
        <title>hibernate的查询的比较</title>
        <author>dreamstone</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dreamstone.javaeye.com">dreamstone</a>&nbsp;
          链接：<a href="http://dreamstone.javaeye.com/blog/106496" style="color:red;">http://dreamstone.javaeye.com/blog/106496</a>&nbsp;
          发表时间: 2007年07月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>hibernate的查询的比较<br />
hibernate的查询有很多,Query,find,Criteria,get,load</p>
<p>query使用hsql语句，可以设置参数是常用的一种方式</p>
<p>criteria的方式，尽量避免了写hsql语句，看起来更面向对象了。</p>
<p>find方式，这种方式已经被新的hibernate丢弃见这里<br />
<a href="http://www.blogjava.net/dreamstone/archive/2007/07/28/133053.html">http://www.blogjava.net/dreamstone/archive/2007/07/28/133053.html</a></p>
<p>get和load方式是根据id取得一个记录<br />
下边详细说一下get和load的不同，因为有些时候为了对比也会把find加进来。</p>
<p>1，从返回结果上对比：<br />
load方式检索不到的话会抛出org.hibernate.ObjectNotFoundException异常<br />
get方法检索不到的话会返回null</p>
<p>2，从检索执行机制上对比：<br />
get方法和find方法都是直接从数据库中检索<br />
而load方法的执行则比较复杂<br />
1,首先查找session的persistent Context中是否有缓存，如果有则直接返回<br />
2,如果没有则判断是否是lazy，如果不是直接访问数据库检索，查到记录返回，查不到抛出异常<br />
3,如果是lazy则需要建立代理对象，对象的initialized属性为false，target属性为null<br />
4, 在访问获得的代理对象的属性时,检索数据库，如果找到记录则把该记录的对象复制到代理对象的target<br />
上，并将initialized=true，如果找不到就抛出异常 。<br />
</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://dreamstone.javaeye.com/blog/106496#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 29 Jul 2007 00:56:13 +0800</pubDate>
        <link>http://dreamstone.javaeye.com/blog/106496</link>
        <guid>http://dreamstone.javaeye.com/blog/106496</guid>
      </item>
      <item>
        <title>hibernate 3.2中的session接口的不同</title>
        <author>dreamstone</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dreamstone.javaeye.com">dreamstone</a>&nbsp;
          链接：<a href="http://dreamstone.javaeye.com/blog/106495" style="color:red;">http://dreamstone.javaeye.com/blog/106495</a>&nbsp;
          发表时间: 2007年07月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>hibernate 3中的session接口的不同<br />
hibernate3.2版本中session出现了2个<br />
新session接口：org.hibernate.Session<br />
老session接口：org.hibernate.classic.Session<br />
顾名思义，classic包下的session就是以前常用的session，新的这个相比老的有很大变化。下边详细列出<br />
1，去掉了所有的find方法<br />
在新的session接口中没有find方法，而在老的session接口中把find全部注释成deprecated了。<br />
2,去掉所有的saveOrUpdateCopy，使用merge代替，这是classic.Session注释中的一段原话.<br />
/**<br />
&nbsp; * Copy the state of the given object onto the persistent object with the same<br />
&nbsp; * identifier. If there is no persistent instance currently associated with<br />
&nbsp; * the session, it will be loaded. Return the persistent instance. If the<br />
&nbsp; * given instance is unsaved or does not exist in the database, save it and<br />
&nbsp; * return it as a newly persistent instance. Otherwise, the given instance<br />
&nbsp; * does not become associated with the session.<br />
&nbsp; *<br />
&nbsp; * @deprecated use <a href="mailto:{@link">{@link</a> org.hibernate.Session#merge(String, Object)}<br />
&nbsp; *<br />
&nbsp; * @param object a transient instance with state to be copied<br />
&nbsp; * @return an updated persistent instance<br />
&nbsp; */<br />
注意这句：@deprecated use <a href="mailto:{@link">{@link</a> org.hibernate.Session#merge(String, Object)}<br />
3,去掉了iterate方法<br />
给出的注释是使用createQuery，自己获得iterate<br />
4，去掉了filter方法<br />
@deprecated use <a href="mailto:{@link">{@link</a> #createFilter(Object, String)}.{@link Query#list}<br />
给出的注释说用createFilter代替，实际就是自己从createFilter获得query然后自己查询<br />
5，增加了一些方法<br />
具体自己看api吧，主要是提供了一些新的功能。<br />
总结：<br />
从上边的改变不难看出hibernate对于接口的设定观念改变了。</p>
<p>以前的策略是：<br />
尽量给出全的接口，这样减少用户的代码量，所以filter直接返回collection，iterate直接返回<br />
iterate。但这样的结果是过度的提供接口，造成了学习上的负担和选择上的负担。如何记住这些函数，如何在众多函数<br />
中选择是个麻烦事情。<br />
凡是做java的都知道，用一个java的东西最辛苦的是选择，在开源的世界里边选择一个适合自己的工程，再在这个选择的工程里边选择实现方法<br />
因为可能提供很多种实现方法，而且有些还是deprecated的。</p>
<p>现在的策略：<br />
尽量简化接口，或减少函数，或者简化函数名，例如把saveOrUpdateCopy变成merge。<br />
这样的好处是记忆学习负担少。多写几句代码不是特别麻烦。其实我个人来讲更喜欢现在的感觉。<br />
以前的策略其实很大程度上是满足程序员的个人需求，更有成就感。但确不适合使用者的需求。</p>
<p>ok，无论如何现在的情况是更好了。</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://dreamstone.javaeye.com/blog/106495#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 29 Jul 2007 00:55:31 +0800</pubDate>
        <link>http://dreamstone.javaeye.com/blog/106495</link>
        <guid>http://dreamstone.javaeye.com/blog/106495</guid>
      </item>
      <item>
        <title>apache mina (异步连接框架)介绍 </title>
        <author>dreamstone</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dreamstone.javaeye.com">dreamstone</a>&nbsp;
          链接：<a href="http://dreamstone.javaeye.com/blog/100104" style="color:red;">http://dreamstone.javaeye.com/blog/100104</a>&nbsp;
          发表时间: 2007年07月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font size="2">一、介绍<br />
mina(Multipurpose Infrastructure for Network Applications) 是apache的顶级项目之一，用于构造异步连接的各种网络应用<br />
二、最简单的使用实例<br />
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000">&nbsp;aicu.mina;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.io.IOException;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.net.InetSocketAddress;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.nio.charset.Charset;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.mina.common.ByteBuffer;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.mina.common.IoAcceptor;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.mina.common.SimpleByteBufferAllocator;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.mina.filter.LoggingFilter;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.mina.filter.codec.ProtocolCodecFilter;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.mina.filter.codec.textline.TextLineCodecFactory;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.mina.transport.socket.nio.SocketAcceptor;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.mina.transport.socket.nio.SocketAcceptorConfig;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" id="Codehighlighter1_581_1434_Open_Image" onclick="this.style.display='none'; Codehighlighter1_581_1434_Open_Text.style.display='none'; Codehighlighter1_581_1434_Closed_Image.style.display='inline'; Codehighlighter1_581_1434_Closed_Text.style.display='inline';" align="top" alt="" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" id="Codehighlighter1_581_1434_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_581_1434_Closed_Text.style.display='none'; Codehighlighter1_581_1434_Open_Image.style.display='inline'; Codehighlighter1_581_1434_Open_Text.style.display='inline';" align="top" alt="" style="DISPLAY: none" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;MinaTimeServer&nbsp;</span><span id="Codehighlighter1_581_1434_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_581_1434_Open_Text"><span style="COLOR: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" /><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;PORT&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">9123</span><span style="COLOR: #000000">;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" /><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_689_1432_Open_Image" onclick="this.style.display='none'; Codehighlighter1_689_1432_Open_Text.style.display='none'; Codehighlighter1_689_1432_Closed_Image.style.display='inline'; Codehighlighter1_689_1432_Closed_Text.style.display='inline';" align="top" alt="" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_689_1432_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_689_1432_Closed_Text.style.display='none'; Codehighlighter1_689_1432_Open_Image.style.display='inline'; Codehighlighter1_689_1432_Open_Text.style.display='inline';" align="top" alt="" style="DISPLAY: none" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;IOException&nbsp;</span><span id="Codehighlighter1_689_1432_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_689_1432_Open_Text"><span style="COLOR: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置buffer</span><span style="COLOR: #008000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" /></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ByteBuffer.setUseDirectBuffers(</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ByteBuffer.setAllocator(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;SimpleByteBufferAllocator());<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">定义acceptor</span><span style="COLOR: #008000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" /></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IoAcceptor&nbsp;acceptor&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;SocketAcceptor();<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">定义config</span><span style="COLOR: #008000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" /></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SocketAcceptorConfig&nbsp;cfg&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;SocketAcceptorConfig();<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置config,加入filter</span><span style="COLOR: #008000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" /></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cfg.getSessionConfig().setReuseAddress(&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">&nbsp;);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cfg.getFilterChain().addLast(&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">logger</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;LoggingFilter()&nbsp;);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cfg.getFilterChain().addLast(&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">codec</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;ProtocolCodecFilter(&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;TextLineCodecFactory(&nbsp;Charset.forName(&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">UTF-8</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">&nbsp;))));<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">加入port&nbsp;handler&nbsp;cfg</span><span style="COLOR: #008000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" /></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;acceptor.bind(&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;InetSocketAddress(PORT),&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;TimeServerHandler(),&nbsp;cfg);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">MINA&nbsp;Time&nbsp;server&nbsp;started.</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />}</span></span></div>
<br />
对应的handler ,handler的作用是在对应的网事件的处理代码<br />
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000">&nbsp;aicu.mina;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.util.Date;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.mina.common.IdleStatus;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.mina.common.IoHandlerAdapter;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.mina.common.IoSession;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.mina.common.TransportType;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.mina.transport.socket.nio.SocketSessionConfig;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" id="Codehighlighter1_341_1116_Open_Image" onclick="this.style.display='none'; Codehighlighter1_341_1116_Open_Text.style.display='none'; Codehighlighter1_341_1116_Closed_Image.style.display='inline'; Codehighlighter1_341_1116_Closed_Text.style.display='inline';" align="top" alt="" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" id="Codehighlighter1_341_1116_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_341_1116_Closed_Text.style.display='none'; Codehighlighter1_341_1116_Open_Image.style.display='inline'; Codehighlighter1_341_1116_Open_Text.style.display='inline';" align="top" alt="" style="DISPLAY: none" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;TimeServerHandler&nbsp;</span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000">&nbsp;IoHandlerAdapter&nbsp;</span><span id="Codehighlighter1_341_1116_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_341_1116_Open_Text"><span style="COLOR: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_421_466_Open_Image" onclick="this.style.display='none'; Codehighlighter1_421_466_Open_Text.style.display='none'; Codehighlighter1_421_466_Closed_Image.style.display='inline'; Codehighlighter1_421_466_Closed_Text.style.display='inline';" align="top" alt="" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_421_466_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_421_466_Closed_Text.style.display='none'; Codehighlighter1_421_466_Open_Image.style.display='inline'; Codehighlighter1_421_466_Open_Text.style.display='inline';" align="top" alt="" style="DISPLAY: none" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;exceptionCaught(IoSession&nbsp;session,&nbsp;Throwable&nbsp;t)&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;Exception&nbsp;</span><span id="Codehighlighter1_421_466_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_421_466_Open_Text"><span style="COLOR: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.printStackTrace();<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" /><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_546_804_Open_Image" onclick="this.style.display='none'; Codehighlighter1_546_804_Open_Text.style.display='none'; Codehighlighter1_546_804_Closed_Image.style.display='inline'; Codehighlighter1_546_804_Closed_Text.style.display='inline';" align="top" alt="" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_546_804_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_546_804_Closed_Text.style.display='none'; Codehighlighter1_546_804_Open_Image.style.display='inline'; Codehighlighter1_546_804_Open_Text.style.display='inline';" align="top" alt="" style="DISPLAY: none" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;messageReceived(IoSession&nbsp;session,&nbsp;Object&nbsp;msg)&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;Exception&nbsp;</span><span id="Codehighlighter1_546_804_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_546_804_Open_Text"><span style="COLOR: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;str&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;msg.toString();<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">如果是quit就关闭session退出</span><span style="COLOR: #008000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_647_682_Open_Image" onclick="this.style.display='none'; Codehighlighter1_647_682_Open_Text.style.display='none'; Codehighlighter1_647_682_Closed_Image.style.display='inline'; Codehighlighter1_647_682_Closed_Text.style.display='inline';" align="top" alt="" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_647_682_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_647_682_Closed_Text.style.display='none'; Codehighlighter1_647_682_Open_Image.style.display='inline'; Codehighlighter1_647_682_Open_Text.style.display='inline';" align="top" alt="" style="DISPLAY: none" /></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;str.trim().equalsIgnoreCase(</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">quit</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">)&nbsp;)&nbsp;</span><span id="Codehighlighter1_647_682_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_647_682_Open_Text"><span style="COLOR: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">否则打印当前日期</span><span style="COLOR: #008000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" /></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;date&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Date();<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.write(&nbsp;date.toString()&nbsp;);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">Message&nbsp;written<img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" /><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_871_1114_Open_Image" onclick="this.style.display='none'; Codehighlighter1_871_1114_Open_Text.style.display='none'; Codehighlighter1_871_1114_Closed_Image.style.display='inline'; Codehighlighter1_871_1114_Closed_Text.style.display='inline';" align="top" alt="" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_871_1114_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_871_1114_Closed_Text.style.display='none'; Codehighlighter1_871_1114_Open_Image.style.display='inline'; Codehighlighter1_871_1114_Open_Text.style.display='inline';" align="top" alt="" style="DISPLAY: none" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;sessionCreated(IoSession&nbsp;session)&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;Exception&nbsp;</span><span id="Codehighlighter1_871_1114_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_871_1114_Open_Text"><span style="COLOR: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">Session&nbsp;created<img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" /><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;session.getTransportType()&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;TransportType.SOCKET&nbsp;)<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((SocketSessionConfig)&nbsp;session.getConfig()&nbsp;).setReceiveBufferSize(&nbsp;</span><span style="COLOR: #000000">2048</span><span style="COLOR: #000000">&nbsp;);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" /><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.setIdleTime(&nbsp;IdleStatus.BOTH_IDLE,&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">&nbsp;);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />}</span></span></div>
三、使用方法：<br />
编译上边两个类（需要加入mina的jar文件)，然后运行terminalServer<br />
开始-&gt;运行-&gt;cmd进入控制台<br />
telnet 127.0.0.1 9123<br />
输入hello<br />
得到当前日期<br />
输入quit关闭session。<br />
</font>
          <br/><br/>
          <span style="color:red;">
            <a href="http://dreamstone.javaeye.com/blog/100104#comments" style="color:red;">已有 <strong>2</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 11 Jul 2007 13:11:32 +0800</pubDate>
        <link>http://dreamstone.javaeye.com/blog/100104</link>
        <guid>http://dreamstone.javaeye.com/blog/100104</guid>
      </item>
      <item>
        <title>ice vs corba</title>
        <author>dreamstone</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dreamstone.javaeye.com">dreamstone</a>&nbsp;
          链接：<a href="http://dreamstone.javaeye.com/blog/83798" style="color:red;">http://dreamstone.javaeye.com/blog/83798</a>&nbsp;
          发表时间: 2007年05月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          公司给讲了一堂课，主要是讲<em>Ice</em> 的,和C++的同事一起听的。记录一些内容，另外放一些自己看过的资料：<br />
1，学习Ice必须的网站<br />
<a href="http://www.zeroc.com/">www.zeroc.com</a><span class="a"><font size="2" color="#008000"><br />
<font size="3" color="#000000">2，ice简介<br />
</font>
<p style="FONT-SIZE: 14pt; COLOR: #000000">ICE(Internet Communications Engine)是一个为现实中程序员而写的中间件平台。作为一个高性能的互联网通信平台，ICE包含了很多分层的服务和插件(Plug-ins)，并且简单、高效和强大。</p>
<p style="FONT-SIZE: 14pt; COLOR: #000000">ICE的自由使用遵从GNU的GPL(GNU General Public Licens)许可的条款。ICE也有商业的许可证，如果你想将ICE使用在你的私有产品中，那么你应该使用ICE的商业许可证。可以联系<a href="mailto:sales@zeroc.com" target="_blank"><u><font color="#0000ff">sales@zeroc.com</font></u></a>来获得这方面的更多信息。</p>
<p style="FONT-SIZE: 14pt; COLOR: #000000">ICE当前支持C++、Java、C#、Visual Basic、Python和PHP编程语言，并支持在多种操作系统上运行。更多的操作系统和编程语言将会在以后的发布中支持。</p>
<p style="FONT-SIZE: 14pt; COLOR: #000000">ICE有以下几部分组成：</p>
<p style="FONT-SIZE: 14pt; COLOR: #000000">Slice<br />
ICE的规范语言，跟CORBA的IDL(Interface Definition Language)等价的东西。Slice建立了客户端和服务器端共同遵守的契约：接口。Slice也用来描述对象持久数据。</p>
<p style="FONT-SIZE: 14pt; COLOR: #000000">Slice Compilers<br />
Slice的规范语言可以影射成多种编程语言。目前ICE支持C++，Java，Python，PHP，C#和VB的语言影射。Ice的客户端和服务器端协同工作，而不会知道分别实现的是何种编程语言。</p>
<p style="FONT-SIZE: 14pt; COLOR: #000000">Ice<br />
Ice的核心库。在众多的特性当中，Ice核心库通过一个高效的协议(包含TCP/UDP层上协议压缩)来管理所有的通信任务，为多线程服务器提供了一个灵活的线程池，并且有特别的功能来支持上百万对象的可扩展性。</p>
<p style="FONT-SIZE: 14pt; COLOR: #000000"><br />
IceUtil<br />
一些常用的功能函数集。例如Unicode处理和多线程编程，是用C++写成。</p>
<p style="FONT-SIZE: 14pt; COLOR: #000000">IceBox<br />
一个专用于ICE应用的应用服务器。ICEBox可以方便地运行和管理动态加载、共享库或java类的形式Ice的服务。</p>
<p style="FONT-SIZE: 14pt; COLOR: #000000">IcePack<br />
一个成熟的服务激活和部署工具。IcePack能大大简化在异构网络之间部署应用的复杂性。只要简单的编写XML格式的一个部署描述文件，IcePack就能自动处理剩下的工作。</p>
<p style="FONT-SIZE: 14pt; COLOR: #000000">Freeze<br />
Freeze提供了Ice Servants对象的自动持久性。通过几行代码，一个应用就可以生成一个高度可扩展的逐出器(evictor)来高效地管理持久对象。</p>
<p style="FONT-SIZE: 14pt; COLOR: #000000">FreezeScript<br />
在大的软件项目里，持久对象的数据类型改变很常见。为了最小化这些变化的影响，FreezeScript提供了相应的工具来检查和移植Freeze生成的数据库。这些工具支持XML格式的配置脚本，易于使用。</p>
<p style="FONT-SIZE: 14pt; COLOR: #000000">IceSSL<br />
用于Ice核心的动态的SSL传输插件。提供了认证、加密和消息完整性，使用工业标准的SSL协议来实现。</p>
<p style="FONT-SIZE: 14pt; COLOR: #000000">Glacier<br />
面向对象中间件平台的一个最大的挑战是安全性和防火墙。Glacier是Ice的防火墙解决方案，它大大简化了安全程序的部署。Glacier认证和过滤客户的请求并允许服务器通过安全的方式回调客户端对象。结合IceSSL的使用，Glacier提供了强大的安全解决方案，即安全，又易于配置管理。</p>
<p style="FONT-SIZE: 14pt; COLOR: #000000">IceStorm<br />
一个支持联盟的消息服务。和大多数的其他消息和事件服务相比，IceStorm支持有类型的事件，这意味着通过联盟广播一个消息和调用一个接口上的一个方法一样容易。</p>
<p style="FONT-SIZE: 14pt; COLOR: #000000">IcePatch<br />
一个软件修补和分发的服务。为确保运行的软件是最新的版本，要经常更新软件，这是一件乏味的工作。IcePatch自动更新在某个目录层次下的文件。只有需要更新的文件会下作到客户端，为了快速的下载更新，IcePatch使用的高效的压缩算法。<br />
3、ice vs corba差异<br />
<a href="http://gigaboy.bokee.com/2158057.html">http://gigaboy.bokee.com/2158057.html</a><br />
4、ice vs corba性能对比<br />
<a href="http://gigaboy.bokee.com/2160870.html">http://gigaboy.bokee.com/2160870.html</a><br />
5、ice评价<br />
corba是一个规范，ice不是 ice的特性是zeroc想怎样就怎样的 所以也不会有第三方产商参与 ice对各种平台的支持也只有zeroc的实现版本。使用Ice不用自己设计传输协议了 ，Ice有成熟的商用案例。ICE是以前Corba的开发者来开发的，吸取了corba的长处，避免了一些短处，特点是：效率高、简单、免费</p>
</font></span>
          <br/><br/>
          <span style="color:red;">
            <a href="http://dreamstone.javaeye.com/blog/83798#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 28 May 2007 09:13:21 +0800</pubDate>
        <link>http://dreamstone.javaeye.com/blog/83798</link>
        <guid>http://dreamstone.javaeye.com/blog/83798</guid>
      </item>
      <item>
        <title>面向对象（OOP）方法使用 JavaScript </title>
        <author>dreamstone</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dreamstone.javaeye.com">dreamstone</a>&nbsp;
          链接：<a href="http://dreamstone.javaeye.com/blog/83797" style="color:red;">http://dreamstone.javaeye.com/blog/83797</a>&nbsp;
          发表时间: 2007年05月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>private variables：原始的定义变量的方法 var<br />
private functions:通过 var functionName=function(){}声明</p>
<p>privileged methods: 通过this.methodName=function(){}声明<br />
privileged properties:通过 this.variableName来声明<br />
(有些地方把privileged properties叫做public properties，但我感觉无论是按照<br />
定义写法，还是为了便于理解都叫privileged properties更好些。更便于对比对称记忆)</p>
<p>prototype methods :通过Classname.prototype.methodname=function(){}来声明<br />
(有些地方叫public method，同样和上边一样的理由，这里改叫prototype method)<br />
prototype properties:通过 classname.prototype.propertyName=somevalue来声明</p>
<p>static properties: 通过classname.propertyName=somevalue定义<br />
static method :通过classnamne.methodName来声明</p>
<p>说明：有些地方（例如我看的文档中）把privileged properties和prototype method叫成<br />
public properties 和public method，不知道为什么这样叫。这样命名后造成的问题是<br />
1,privileged method没有对应的privileged properties<br />
2,prototype properties没有对应的prototype method<br />
3,public method和public properties的定义方式又不对称</p>
<p>下边解释一下几种情况：<br />
1,private：定义在类内部，只能被类内部的方法调用，例如privileged(见实例一中的(1)(2))<br />
2,priviledged ：定义在类内部，能被任何调用，在调用上有点类似Java中<br />
的非静态public方法(见实例一中的(3))<br />
3,prototype：这个概念不太好理解，在执行上有点像java的clone，只在类初始化的时候<br />
执行一次。每次建立实例的时候不执行。能被继承。<br />
4,static： 有点类似java中的静态。各实例共享，不能被继承<br />
实例一如下：<br />
</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" id="Codehighlighter1_35_457_Open_Image" onclick="this.style.display='none'; Codehighlighter1_35_457_Open_Text.style.display='none'; Codehighlighter1_35_457_Closed_Image.style.display='inline'; Codehighlighter1_35_457_Closed_Text.style.display='inline';" align="top" alt="" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" id="Codehighlighter1_35_457_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_35_457_Closed_Text.style.display='none'; Codehighlighter1_35_457_Open_Image.style.display='inline'; Codehighlighter1_35_457_Open_Text.style.display='inline';" align="top" alt="" style="DISPLAY: none" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;Pet(name,color)</span><span id="Codehighlighter1_35_457_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_35_457_Open_Text"><span style="COLOR: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">priviledged&nbsp;properties</span><span style="COLOR: #008000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" /></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">name;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.color</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">color;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">private&nbsp;properties</span><span style="COLOR: #008000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" /></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;type</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">animal</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">private&nbsp;method</span><span style="COLOR: #008000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_195_215_Open_Image" onclick="this.style.display='none'; Codehighlighter1_195_215_Open_Text.style.display='none'; Codehighlighter1_195_215_Closed_Image.style.display='inline'; Codehighlighter1_195_215_Closed_Text.style.display='inline';" align="top" alt="" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_195_215_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_195_215_Closed_Text.style.display='none'; Codehighlighter1_195_215_Open_Image.style.display='inline'; Codehighlighter1_195_215_Open_Text.style.display='inline';" align="top" alt="" style="DISPLAY: none" /></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;run2&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;function()</span><span id="Codehighlighter1_195_215_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_195_215_Open_Text"><span style="COLOR: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;run(type);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_245_301_Open_Image" onclick="this.style.display='none'; Codehighlighter1_245_301_Open_Text.style.display='none'; Codehighlighter1_245_301_Closed_Image.style.display='inline'; Codehighlighter1_245_301_Closed_Text.style.display='inline';" align="top" alt="" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_245_301_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_245_301_Closed_Text.style.display='none'; Codehighlighter1_245_301_Open_Image.style.display='inline'; Codehighlighter1_245_301_Open_Text.style.display='inline';" align="top" alt="" style="DISPLAY: none" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;run&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;function(mType)</span><span id="Codehighlighter1_245_301_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_245_301_Open_Text"><span style="COLOR: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(color</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">name</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">&nbsp;is&nbsp;runing(</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">mType</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">priviledged&nbsp;method</span><span style="COLOR: #008000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_355_453_Open_Image" onclick="this.style.display='none'; Codehighlighter1_355_453_Open_Text.style.display='none'; Codehighlighter1_355_453_Closed_Image.style.display='inline'; Codehighlighter1_355_453_Closed_Text.style.display='inline';" align="top" alt="" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_355_453_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_355_453_Closed_Text.style.display='none'; Codehighlighter1_355_453_Open_Image.style.display='inline'; Codehighlighter1_355_453_Open_Text.style.display='inline';" align="top" alt="" style="DISPLAY: none" /></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.callRun&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;function()</span><span id="Codehighlighter1_355_453_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_355_453_Open_Text"><span style="COLOR: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_361_433_Open_Image" onclick="this.style.display='none'; Codehighlighter1_361_433_Open_Text.style.display='none'; Codehighlighter1_361_433_Closed_Image.style.display='inline'; Codehighlighter1_361_433_Closed_Text.style.display='inline';" align="top" alt="" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_361_433_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_361_433_Closed_Text.style.display='none'; Codehighlighter1_361_433_Open_Image.style.display='inline'; Codehighlighter1_361_433_Open_Text.style.display='inline';" align="top" alt="" style="DISPLAY: none" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_361_433_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id="Codehighlighter1_361_433_Open_Text"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">(1)priviledged&nbsp;method&nbsp;can&nbsp;visit&nbsp;private&nbsp;properties&nbsp;and&nbsp;private&nbsp;method</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;run(type);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" alt="" /><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" id="Codehighlighter1_505_635_Open_Image" onclick="this.style.display='none'; Codehighlighter1_505_635_Open_Text.style.display='none'; Codehighlighter1_505_635_Closed_Image.style.display='inline'; Codehighlighter1_505_635_Closed_Text.style.display='inline';" align="top" alt="" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" id="Codehighlighter1_505_635_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_505_635_Closed_Text.style.display='none'; Codehighlighter1_505_635_Open_Image.style.display='inline'; Codehighlighter1_505_635_Open_Text.style.display='inline';" align="top" alt="" style="DISPLAY: none" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pet.prototype.callPrivateRun&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">function(pet)</span><span id="Codehighlighter1_505_635_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.b