<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>hellsing42</title>
    <description></description>
    <link>http://hellsing42.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>笑话!</title>
        <author>hellsing42</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hellsing42.javaeye.com">hellsing42</a>&nbsp;
                    链接：<a href="http://hellsing42.javaeye.com/blog/240028" style="color:red;">http://hellsing42.javaeye.com/blog/240028</a>&nbsp;
          发表时间: 2008年09月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>两只青蛙相爱了，结婚后生了一个癞蛤嫫，公青蛙见状大怒说：贱人，怎么回事？母青蛙哭着说：他爹，认识你之前我整过容。&nbsp;&nbsp;&nbsp;(爱情需要信任)&nbsp;&nbsp; <br /><br />小驴问老驴：为啥咱们天天吃干草，而奶牛顿顿精饲料？老驴叹到：咱爷们比不了，我们是靠跑腿吃饭，人家是靠胸脯吃饭！&nbsp;&nbsp;&nbsp;(生活需要忍耐)&nbsp;&nbsp; <br /><br />鸭子和螃蟹赛跑,一起到达终点，难分胜负，裁判说：你们来个剪刀石头布吧！鸭子大怒：妈的，算计我?我一出是布，他总是剪刀。&nbsp;&nbsp;&nbsp;(比赛需要天赋)&nbsp;&nbsp; <br /><br />狗对熊说：嫁给我吧,嫁给我你会幸福。熊说：才不嫁呢，嫁给你只会生狗熊，我要嫁给猫，生熊猫那才尊贵呢!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(婚姻需要理智)&nbsp;&nbsp; <br /><br />老鳖调戏河蚌，被咬，老鳖忍痛拖着河蚌来回爬，青蛙见了敬佩的说：乖乖，鳖哥混大了，出入都夹着公文包。&nbsp;&nbsp;&nbsp;&nbsp;(该装的时候得装)&nbsp;&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://hellsing42.javaeye.com/blog/240028#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;">Windows7在微软WinHEC 2008上揭开神秘面纱</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, 10 Sep 2008 09:50:47 +0800</pubDate>
        <link>http://hellsing42.javaeye.com/blog/240028</link>
        <guid>http://hellsing42.javaeye.com/blog/240028</guid>
      </item>
          <item>
        <title>集合类同步问题</title>
        <author>hellsing42</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hellsing42.javaeye.com">hellsing42</a>&nbsp;
                    链接：<a href="http://hellsing42.javaeye.com/blog/231247" style="color:red;">http://hellsing42.javaeye.com/blog/231247</a>&nbsp;
          发表时间: 2008年08月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>ArrayList&nbsp;内部以数组结构存储&nbsp;&nbsp;&nbsp;线程不同步&nbsp;&nbsp;安全性差&nbsp;效率高<br />Vector&nbsp;&nbsp;&nbsp;&nbsp;内部以数组结构存储&nbsp;&nbsp;&nbsp;线程同步&nbsp;&nbsp;安全性高&nbsp;效率低</p>
<p class="MsoNormal" align="left" style="text-align: left;"><span style="font-size: 12pt; font-family: 宋体;">HashMap</span> <span style="font-size: 10pt; background: silver 0% 50%; color: black; font-family: 宋体; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial;">未同步的，可以使用</span> <span style="font-size: 10pt; background: silver 0% 50%; color: black; font-family: 'Courier New'; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial;">Colletcions</span> <span style="font-size: 10pt; background: silver 0% 50%; color: black; font-family: 宋体; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial;">进行同步</span> </p>
<p class="MsoNormal" align="left" style="text-align: left;"><span style="font-size: 12pt; font-family: 宋体;">Hashtable</span> <span style="font-size: 10pt; background: silver 0% 50%; color: black; font-family: 宋体; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial;">未同步的，可以使用</span> <span style="font-size: 10pt; background: silver 0% 50%; color: black; font-family: 'Courier New'; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial;">Colletcions</span> <span style="font-size: 10pt; background: silver 0% 50%; color: black; font-family: 宋体; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial;">进行同步</span> </p>
<p class="MsoNormal" align="left" style="text-align: left;">&nbsp;</p>
<p class="MsoNormal" align="left" style="text-align: left;">&nbsp;</p>
<p class="MsoNormal" align="left" style="text-align: left;">HashMap和Hashtable及HashSet的区别</p>
<div class="date">2008年07月01日 星期二 10:05</div>
<p class="MsoNormal" align="left" style="text-align: left;">
<table border="0" style="table-layout: fixed;">
<tbody>
<tr>
<td>
<div class="cnt" id="blog_text">
<div class="postbody">Hashtable类 <br />　　Hashtable继承Map接口，实现一个key-value映射的哈希表。任何非空（non-null）的对象都可作为key或者value。 <br />　　添加数据使用put(key, value)，取出数据使用get(key)，这两个基本操作的时间开销为常数。 <br />Hashtable通过initial capacity和load factor两个参数调整性能。通常缺省的load factor 0.75较好地实现了时间和空间的均衡。增大load factor可以节省空间但相应的查找时间将增大，这会影响像get和put这样的操作。 <br />使用Hashtable的简单示例如下，将1，2，3放到Hashtable中，他们的key分别是&rdquo;one&rdquo;，&rdquo;two&rdquo;，&rdquo;three&rdquo;： <br />　　　　Hashtable numbers = new Hashtable(); <br />　　　　numbers.put(&ldquo;one&rdquo;, new Integer(1)); <br />　　　　numbers.put(&ldquo;two&rdquo;, new Integer(2)); <br />　　　　numbers.put(&ldquo;three&rdquo;, new Integer(3)); <br />　　要取出一个数，比如2，用相应的key： <br />　　　　Integer n = (Integer)numbers.get(&ldquo;two&rdquo;); <br />　　　　System.out.println(&ldquo;two = &rdquo; + n); <br />　　由于作为key的对象将通过计算其散列函数来确定与之对应的value的位置，因此任何作为key的对象都必须实现hashCode和equals方法。hashCode和equals方法继承自根类Object，如果你用自定义的类当作key的话，要相当小心，按照散列函数的定义，如果两个对象相同，即obj1.equals(obj2)=true，则它们的hashCode必须相同，但如果两个对象不同，则它们的hashCode不一定不同，如果两个不同对象的hashCode相同，这种现象称为冲突，冲突会导致操作哈希表的时间开销增大，所以尽量定义好的hashCode()方法，能加快哈希表的操作。 <br />　　如果相同的对象有不同的hashCode，对哈希表的操作会出现意想不到的结果（期待的get方法返回null），要避免这种问题，只需要牢记一条：要同时复写equals方法和hashCode方法，而不要只写其中一个。 <br />　　Hashtable是同步的。 <br /><br />HashMap类 <br />　　HashMap和Hashtable类似，不同之处在于HashMap是非同步的，并且允许null，即null value和null key。，但是将HashMap视为Collection时（values()方法可返回Collection），其迭代子操作时间开销和HashMap的容量成比例。因此，如果迭代操作的性能相当重要的话，不要将HashMap的初始化容量设得过高，或者load factor过低。 <br /><br />WeakHashMap类 <br />　　WeakHashMap是一种改进的HashMap，它对key实行&ldquo;弱引用&rdquo;，如果一个key不再被外部所引用，那么该key可以被GC回收。 <br /><br /><br /><br />HashSet请参考对Set的描述 <br /><br />Set是一种不包含重复的元素的Collection，即任意的两个元素e1和e2都有e1.equals(e2)=false，Set最多有一个null元素。 <br />　　Set的构造函数有一个约束条件，传入的Collection参数不能包含重复的元素。　　请注意：必须小心操作可变对象（Mutable Object）。如果一个Set中的可变元素改变了自身状态导致Object.equals(Object)=true将导致一些问题。<br />两个通用Set实现是HashSet 和TreeSet。要决定用哪一个，那是非常简单明了的。 HashSet 要快得多 (对大多数操作是常数时间之于对数时间（constant time vs. log time）), 但不提供排序保证。如果你需要使用 SortedSet 中的操作，或者按顺序迭代对你来说是重要的，那么请使用 TreeSet。 否则，使用 HashSet。 在大多数时间都不使用 HashSet ，对你来说是个公平的赌博。 <br /><br />　　关于 HashSet，有一件事应该牢记，即就条目数和容量之和来讲，迭代是线性的。因此，如果迭代性能很重要，那就应该慎重选择一个适当的初始容量。容量选得太大，既浪费空间，也浪费时间。 默认的初试容量是101, 一般来讲，它比你所需要的要多。可以使用 int 构造函数来指定初始容量。要分配 HashSet 的初始容量为17: <br /><br />Set s= new HashSet(17); <br /><br />　　HashSets 另有一个称作 装载因数（load factor） 的"调整参数（tuning parameter）" 。如果你非常在乎你的 HashSet 的空间的使用，请阅读 HashSet 文本以获取详细信息。否则，就使用默认值吧。如果你接受默认装载因数，但你确实又想指定初始容量，那么，选一个大约是你期望你的 Set 将增长到的容量的两倍的数。如果你的猜测不着边，它也可以增长，或只是浪费一点空间。但都没有大问题。如果你知道有关正确尺寸的一个最佳值，用它吧；如果不知道，那就使用一个旧的值，或使用一个偶数值。它真的不是非常重要。这些事情只能使 HashSet 稍稍变好一点点。 <br /><br />　　TreeSet 没有调整参数。除 clone 之外，HashSet 和 TreeSet 都仅有那些由它们各自的接口所要求的操作 (Set 和 TreeSet)，而没有任何别的操作。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></div>
</div>
</td>
</tr>
</tbody>
</table>
</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://hellsing42.javaeye.com/blog/231247#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/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;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 21 Aug 2008 16:48:18 +0800</pubDate>
        <link>http://hellsing42.javaeye.com/blog/231247</link>
        <guid>http://hellsing42.javaeye.com/blog/231247</guid>
      </item>
          <item>
        <title>java.io中的设计模式</title>
        <author>hellsing42</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hellsing42.javaeye.com">hellsing42</a>&nbsp;
                    链接：<a href="http://hellsing42.javaeye.com/blog/230144" style="color:red;">http://hellsing42.javaeye.com/blog/230144</a>&nbsp;
          发表时间: 2008年08月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span class="a14c">&nbsp;
<p style="text-indent: 2em;">&nbsp;</p>
<p><span style="font-size: small; font-family: Times New Roman;">我想任何一本介绍模式的书在讲到Decorator模式的时候不能不提到它的实际应用&mdash;&mdash;在Java/IO库里面的应用，&lt;&gt;这本书也不例外，有点不一样的是，这本书在介绍的时候有个专题，是从两个模式来看Java/IO库，完这个专题后，个人感觉对Java/IO库有了全新的认识同时也加深了Decorator模式跟Adapter适配器模式的理解，现和大家分享下这个在我看来很伟大的成果，同时说明下，以下大部分文字跟图片是来自&lt;&gt;这本书。 <br />　　一。引子（概括地介绍Java的ＩＯ）</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　无论是哪种编程语言，输入跟输出都是重要的一部分，Java也不例外，而且Java将输入／输出的功能和使用范畴做了很大的扩充。它采用了流的机制来实现输入／输出，所谓流，就是数据的有序排列，而流可以是从某个源（称为流源或Source of Stream）出来，到某个目的地（称为流汇或Sink of Stream）去的。由流的方向，可以分成输入流和输出流，一个程序从输入流读取数据向输出流写数据。</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　如，一个程序可以用FileInputStream类从一个磁盘文件读取数据，如下图所示：</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　像FileInputStream这样的处理器叫做流处理器，它就像流的管道一样，从一个流源吸入某种类型的数据，并输出某种类型的数据。上面这种示意图叫做流的管道图。</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　同样道理，也可以用FileOutputStream类向一个磁盘文件写数据，如下图所示：</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　在实际应用这种机制并不没有太大的用处，程序需要写出地通常是非常结构化的信息，因此这些byte类型的数据实际上是一些数值，文字，源代码等。Java的I/O库提供了一个称做链接（Chaining）的机制，可以将一个流处理器跟另一个流处理器首尾相接，以其中之一的输出为输入，形成一个流管道的链接。</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　例如，DataInputStream流处理器可以把FileInputStream流对象的输出当作输入，将Byte类型的数据转换成Java的原始类型和String类型的数据。如下图所示：</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　类似地，向一个文件写入Byte类型的数据不是一个简单的过程。一个程序需要向一个文件里写入的数据往往都是结构化的，而Byte类型则是原始类型。因此在写的时候必须经过转换。DataOutputStream流处理器提供了接收了原始数据类型和String数据类型，而这个流处理器的输出数据则是Byte类型。也就是说DataOutputStream可以将源数据转换成Byte类型的数据，再输出来。</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　这样一来，就可以将DataOutputStream与FileOutputStream链接起来，这样程序就可以将原始数据类型和String类型的源数据写入这个链接好的双重管道里面，达到将结构化数据写到磁盘文件里面的目的，如下图所示：</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　这又是链接的所发挥的大作用。</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　流处理器所处理的流必定都有流源，而如果将流类所处理的流源分类的话，基本可以分成两大类：</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　第一　数组，String，File等，这一种叫原始流源。</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　第二　同样类型的流用做链接流类的流源，叫链接流源。</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　二　Java I/O库的设计原则</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　Java语言的I/O库是对各种常见的流源，流汇以及处理过程的抽象化。客户端的Java程序不必知道最终的流源，流汇是磁盘上的文件还是数组等；也不必关心数据是否经过缓冲的，可否按照行号读取等处理的细节。</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　书中提到了，对于第一次见到Java/IO库的人，无不因为这个库的庞杂而感到困惑；而对于熟悉这个库的人，而又常常为这个库的设计是否得当而争论不体。书的作者提出自己的意见，要理解Java I/O这个庞大而复杂的库，关键是要掌握两个对称性跟两个设计模式模式。</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　Java I/O库具有两个对称性，它们分别是：</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　１　输入－输出对称性，比如InputStream和OutputStream各自占据Byte流的输入与输出的两个平行的等级结构的根部。而Reader和Writer各自占据Char流的输入与输出的两个平行的等级结构的根部。</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　２　byte-char对称，InputStream和Reader的子类分别负责Byte和Char流的输入；OutputStream和Writer的子类分别负责Byte和Char流的输出，它们分别形成平行的等级结构。</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　Java I/O库的两个设计模式：</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　Java的I/O库总体设计是符合装饰者模式（Decorator）跟适配器模式（Adapter）的。如前所述，这个库中处理流的类叫做流类。引子里所谈到的FileInputStream，FileOutputStream，DataInputStream及DataOutputStream都是流处理器的例子。</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　１　装饰者模式：在由InputStream，OutputStream，Reader和Writer代表的等级结构内部，有一些流处理器可以对另一些流处理器起到装饰作用，形成新的，具有改善了的功能的流处理器。装饰者模式是Java I/O库的整体设计模式。这样的一个原则是符合装饰者模式的，如下图所示：</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　２　适配器模式：在由InputStream，OutputStream，Reader和Writer代表的等级结构内部，有一些流处理器是对其它类型的流源的适配。这就是适配器模式的应用，如下图所示。</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　适配器模式应用到了原始流处理器的设计上面，构成了I/O库所有流处理器的起点。</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　JDK为程序员提供了大量的类库，而为了保持类库的可重用性，可扩展性和灵活性，其中使用到了大量的设计模式，本文将介绍JDK的I/O包中使用到的Decorator模式，并运用此模式，实现一个新的输出流类。</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　Decorator模式简介</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　Decorator模式又名包装器（Wrapper），它的主要用途在于给一个对象动态的添加一些额外的职责。与生成子类相比，它更具有灵活性。</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　有时候，我们需要为一个对象而不是整个类添加一些新的功能，比如，给一个文本区添加一个滚动条的功能。我们可以使用继承机制来实现这一功能，但是这种方法不够灵活，我们无法控制文本区加滚动条的方式和时机。而且当文本区需要添加更多的功能时，比如边框等，需要创建新的类，而当需要组合使用这些功能时无疑将会引起类的爆炸。</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　我们可以使用一种更为灵活的方法，就是把文本区嵌入到滚动条中。而这个滚动条的类就相当于对文本区的一个装饰。这个装饰（滚动条）必须与被装饰的组件（文本区）继承自同一个接口，这样，用户就不必关心装饰的实现，因为这对他们来说是透明的。装饰会将用户的请求转发给相应的组件（即调用相关的方法），并可能在转发的前后做一些额外的动作（如添加滚动条）。通过这种方法，我们可以根据组合对文本区嵌套不同的装饰，从而添加任意多的功能。这种动态的对对象添加功能的方法不会引起类的爆炸，也具有了更多的灵活性。</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　以上的方法就是Decorator模式，它通过给对象添加装饰来动态的添加新的功能。如下是Decorator模式的UML图：</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　Component为组件和装饰的公共父类，它定义了子类必须实现的方法。</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　ConcreteComponent是一个具体的组件类，可以通过给它添加装饰来增加新的功能。</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　Decorator是所有装饰的公共父类，它定义了所有装饰必须实现的方法，同时，它还保存了一个对于Component的引用，以便将用户的请求转发给Component，并可能在转发请求前后执行一些附加的动作。</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　ConcreteDecoratorA和ConcreteDecoratorB是具体的装饰，可以使用它们来装饰具体的Component.</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　JAVA IO包中的Decorator模式</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　JDK提供的java.io包中使用了Decorator模式来实现对各种输入输出流的封装。以下将以java.io.OutputStream及其子类为例，讨论一下Decorator模式在IO中的使用。</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　首先来看一段用来创建IO流的代码：</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　以下是代码片段：</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　try {</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　OutputStream out = new DataOutputStream（new FileOutputStream（"test.txt"））；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　} catch （FileNotFoundException e） {</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　e.printStackTrace（）；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　}</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　这段代码对于使用过JAVA输入输出流的人来说再熟悉不过了，我们使用DataOutputStream封装了一个FileOutputStream.这是一个典型的Decorator模式的使用，FileOutputStream相当于Component，DataOutputStream就是一个Decorator.将代码改成如下，将会更容易理解：</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　以下是代码片段：</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　try {</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　OutputStream out = new FileOutputStream（"test.txt"）；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　out = new DataOutputStream（out）；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　} catch（FileNotFoundException e） {</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　e.printStatckTrace（）；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　}</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　由于FileOutputStream和DataOutputStream有公共的父类OutputStream，因此对对象的装饰对于用户来说几乎是透明的。下面就来看看OutputStream及其子类是如何构成Decorator模式的：</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　OutputStream是一个抽象类，它是所有输出流的公共父类，其源代码如下：</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　以下是代码片段：</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　public abstract class OutputStream implements Closeable， Flushable {</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　public abstract void write（int b） throws IOException；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　&hellip;&hellip;</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　}</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　它定义了write（int b）的抽象方法。这相当于Decorator模式中的Component类。</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　ByteArrayOutputStream，FileOutputStream 和 PipedOutputStream 三个类都直接从OutputStream继承，以ByteArrayOutputStream为例：</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　以下是代码片段：</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　public class ByteArrayOutputStream extends OutputStream {</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　protected byte buf[]；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　protected int count；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　public ByteArrayOutputStream（） {</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　this（32）；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　}</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　public ByteArrayOutputStream（int size） {</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　if （size 〈 0） {</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　throw new IllegalArgumentException（"Negative initial size： "</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　+ size）；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　}</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　buf = new byte[size]；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　}</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　public synchronized void write（int b） {</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　int newcount = count + 1；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　if （newcount 〉 buf.length） {</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　byte newbuf[] = new byte[Math.max（buf.length 〈〈 1， newcount）]；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　System.arraycopy（buf， 0， newbuf， 0， count）；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　buf = newbuf；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　}</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　buf[count] = （byte）b；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　count = newcount；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　}</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　&hellip;&hellip;</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　}</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　它实现了OutputStream中的write（int b）方法，因此我们可以用来创建输出流的对象，并完成特定格式的输出。它相当于Decorator模式中的ConcreteComponent类。</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　接着来看一下FilterOutputStream，代码如下：</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　以下是代码片段：</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　public class FilterOutputStream extends OutputStream {</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　protected OutputStream out；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　public FilterOutputStream（OutputStream out） {</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　this.out = out；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　}</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　public void write（int b） throws IOException {</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　out.write（b）；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　}</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　&hellip;&hellip;</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　}</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　同样，它也是从OutputStream继承。但是，它的构造函数很特别，需要传递一个OutputStream的引用给它，并且它将保存对此对象的引用。而如果没有具体的OutputStream对象存在，我们将无法创建FilterOutputStream.由于out既可以是指向FilterOutputStream类型的引用，也可以是指向ByteArrayOutputStream等具体输出流类的引用，因此使用多层嵌套的方式，我们可以为ByteArrayOutputStream添加多种装饰。这个FilterOutputStream类相当于Decorator模式中的Decorator类，它的write（int b）方法只是简单的调用了传入的流的write（int b）方法，而没有做更多的处理，因此它本质上没有对流进行装饰，所以继承它的子类必须覆盖此方法，以达到装饰的目的。</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　BufferedOutputStream 和 DataOutputStream是FilterOutputStream的两个子类，它们相当于Decorator模式中的ConcreteDecorator，并对传入的输出流做了不同的装饰。以BufferedOutputStream类为例：</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　以下是代码片段：</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　public class BufferedOutputStream extends FilterOutputStream {</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　&hellip;&hellip;</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　private void flushBuffer（） throws IOException {</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　if （count 〉 0） {</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　out.write（buf， 0， count）；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　count = 0；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　}</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　}</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　public synchronized void write（int b） throws IOException {</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　if （count 〉= buf.length） {</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　flushBuffer（）；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　}</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　buf[count++] = （byte）b；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　}</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　&hellip;&hellip;</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　}</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　这个类提供了一个缓存机制，等到缓存的容量达到一定的字节数时才写入输出流。首先它继承了FilterOutputStream，并且覆盖了父类的write（int b）方法，在调用输出流写出数据前都会检查缓存是否已满，如果未满，则不写。这样就实现了对输出流对象动态的添加新功能的目的。</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　下面，将使用Decorator模式，为IO写一个新的输出流。</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　自己写一个新的输出流</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　了解了OutputStream及其子类的结构原理后，我们可以写一个新的输出流，来添加新的功能。这部分中将给出一个新的输出流的例子，它将过滤待输出语句中的空格符号。比如需要输出"java io OutputStream"，则过滤后的输出为"javaioOutputStream".以下为SkipSpaceOutputStream类的代码：</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　以下是代码片段：</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　import java.io.FilterOutputStream；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　import java.io.IOException；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　import java.io.OutputStream；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　/**</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　* A new output stream， which will check the space character</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　* and won&lsquo;t write it to the output stream.</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　* @author Magic</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　*</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　*/</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　public class SkipSpaceOutputStream extends FilterOutputStream {</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　public SkipSpaceOutputStream（OutputStream out） {</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　super（out）；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　}</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　/**</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　* Rewrite the method in the parent class， and</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　* skip the space character.</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　*/</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　public void write（int b） throws IOException{</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　if（b！=&lsquo; &rsquo;）{</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　super.write（b）；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　}</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　}</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　}</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　它从FilterOutputStream继承，并且重写了它的write（int b）方法。在write（int b）方法中首先对输入字符进行了检查，如果不是空格，则输出。</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　以下是一个测试程序：</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　以下是代码片段：</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　import java.io.BufferedInputStream；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　import java.io.DataInputStream；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　import java.io.DataOutputStream；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　import java.io.IOException；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　import java.io.InputStream；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　import java.io.OutputStream；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　/**</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　* Test the SkipSpaceOutputStream.</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　* @author Magic</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　*</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　*/</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　public class Test {</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　public static void main（String[] args）{</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　byte[] buffer = new byte[1024]；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　/**</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　* Create input stream from the standard input.</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　*/</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　InputStream in = new BufferedInputStream（new DataInputStream（System.in））；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　/**</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　* write to the standard output.</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　*/</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　OutputStream out = new SkipSpaceOutputStream（new DataOutputStream（System.out））；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　try {</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　System.out.println（"Please input your words： "）；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　int n = in.read（buffer，0，buffer.length）；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　for（int i=0；i〈n；i++）{</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　out.write（buffer[i]）；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　}</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　} catch （IOException e） {</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　e.printStackTrace（）；</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　}</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　}</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　}</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　执行以上测试程序，将要求用户在console窗口中输入信息，程序将过滤掉信息中的空格，并将最后的结果输出到console窗口。比如：</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　以下是引用片段：</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　Please input your words：</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　a b c d e f</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　abcdef</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　总&nbsp;&nbsp; 结</span></p>
<p><span style="font-size: small; font-family: Times New Roman;">　　在java.io包中，不仅OutputStream用到了Decorator设计模式，InputStream，Reader，Writer等都用到了此模式。而作为一个灵活的，可扩展的类库，JDK中使用了大量的设计模式，比如在Swing包中的MVC模式，RMI中的Proxy模式等等。对于JDK中模式的研究不仅能加深对于模式的理解，而且还有利于更透彻的了解类库的结构和组成。</span></p>
</span></p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://hellsing42.javaeye.com/blog/230144#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/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;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 19 Aug 2008 14:18:41 +0800</pubDate>
        <link>http://hellsing42.javaeye.com/blog/230144</link>
        <guid>http://hellsing42.javaeye.com/blog/230144</guid>
      </item>
          <item>
        <title>对25岁前男人的忠告(转)  </title>
        <author>hellsing42</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hellsing42.javaeye.com">hellsing42</a>&nbsp;
                    链接：<a href="http://hellsing42.javaeye.com/blog/227928" style="color:red;">http://hellsing42.javaeye.com/blog/227928</a>&nbsp;
          发表时间: 2008年08月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <table border="0" bgcolor="#ffffff" width="72%">
<tbody>
<tr>
<td class="gray" align="center" height="17" width="3%">&nbsp;</td>
<td class="p14" align="left"><a name="4671177116"></a><span style="color: #0000cc;">对25岁前男人的忠告(转) </span></td>
</tr>
<tr>
<td>&nbsp;</td>
<td align="left" width="97%">
<table class="wr" cellspacing="0" border="0" cellpadding="0">
<tbody>
<tr>
<td class="gray14">1.&nbsp;男人是社会的主体，不管你信或不信。所以男人应该有种责任感。&nbsp;&nbsp;&nbsp; <br />　　2.&nbsp;25岁之前，请记得，爱情通常是假的，或者不是你所想象的那样纯洁和永远。如果你过了25岁，那么你应该懂得这个道理。&nbsp;&nbsp;&nbsp; <br />　　3.&nbsp;吃饭7成饱最舒服。对待女友最多也请你保持在7成。&nbsp;&nbsp;&nbsp; <br />　　4.&nbsp;30岁之前请爱惜自己的身体，前30年你找病，后30年病找你。如果你过了30岁，你自然也会懂得这个道理。&nbsp;&nbsp;&nbsp; <br />　　5.&nbsp;事业远比爱情重要。如果说事业都不能永恒，那么爱情不能算是五月天了。&nbsp;&nbsp;&nbsp; <br />　　6.&nbsp;不要轻易接受追求你的女孩。女追男隔层纱。如果你很容易就陷进去，你会发现你会错过很多东西，失去很多东西。&nbsp;&nbsp;&nbsp; <br />　　7.&nbsp;请你相信，能用钱解决的问题，都不是问题。如果你认为钱索王道，有钱有女人，没钱没女人，那么。女人不是问题。&nbsp;&nbsp;&nbsp; <br />　　8&nbsp;.&nbsp;请永远积极向上。每个男性都有他可爱的地方，但是不可爱的地方只有不积极面对生活。&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;9.&nbsp;不要连续2次让同一个女人伤害。好马不吃回头草，是有他道理的。如果认真考虑过该分手，那么请不要做任何舍不得的行动。&nbsp;&nbsp;&nbsp; <br />　　10.&nbsp;如果你和你前女友能做朋友，那么你要问自己：为什么？如果分手后还是朋友，那么只有2个可能:。你们当初都只是玩玩而已，没付出彼此最真的感情。或者：必定有个人是在默默的付出无怨无悔！&nbsp;&nbsp;&nbsp; <br />　　11.&nbsp;永远不要太相信女人在恋爱时的甜言蜜语。都说女人爱听甜言蜜语，其实，男人更喜欢。&nbsp;&nbsp;&nbsp; <br />　　12.&nbsp;请不要为自己的相貌或者身高过分担心和自卑。人是动物，但是区别于动物。先天条件并不是阻挡你好好生活的借口。人的心灵远胜于相貌，请相信这点。如果有人以相貌取人，那么你也没必要太在意。因为他从某种意义来讲，只是只动物。你会跟动物怄气吗？&nbsp;&nbsp;&nbsp; <br />　　13.&nbsp;失恋时，只有2种可能，要么你爱她她不爱你，或者相反。那么，当你爱的人不再爱你，或者从来没爱过你时。你没有遗憾，因为你失去的只是一个不爱你的人。&nbsp;&nbsp;&nbsp; <br />　　14.&nbsp;请不要欺骗善良的女孩。这个世界上，善良的女孩太少。&nbsp;&nbsp;&nbsp; <br />　　15.&nbsp;不能偏激的认为金钱万能，至少，金钱治不好艾滋病。&nbsp;&nbsp;&nbsp; <br />　　16.&nbsp;请一定要有自信。你就是一道风景，没必要在别人风景里面仰视。&nbsp;&nbsp;&nbsp; <br />　　17.&nbsp;受到再大的打击，只要生命还在，请相信每天的太阳都是新的。&nbsp;&nbsp;&nbsp; <br />　　18.&nbsp;幸福五月天的爱情永远不可能是天平。你想在爱情里幸福就要舍得伤心。&nbsp;&nbsp;&nbsp; <br />　　19.&nbsp;如果你喜欢一个认为别人应该对她好的mm，请尽早放弃。没有人是应该对一个人好的。如果她不明白这个道理，也就是她根本不懂得珍惜。&nbsp; <br />20.&nbsp;不要因为寂寞而找gf，寂寞男人请要学会品味寂寞。请记住：即使寂寞，远方黑暗的夜空下，一定有人和你一样，寂寞的人不同，仰望的星空却是唯一。&nbsp;&nbsp;&nbsp; <br />　　21.&nbsp;任何事没有永远。也别问怎样才能永远。生活有很多无奈。请尽量充实自己，充实生活。请善待生活 </td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
          <br/><br/>
          <span style="color:red;">
            <a href="http://hellsing42.javaeye.com/blog/227928#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/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;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 14 Aug 2008 10:47:19 +0800</pubDate>
        <link>http://hellsing42.javaeye.com/blog/227928</link>
        <guid>http://hellsing42.javaeye.com/blog/227928</guid>
      </item>
          <item>
        <title>使用Graphics2D画虚线和设置线的宽度</title>
        <author>hellsing42</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hellsing42.javaeye.com">hellsing42</a>&nbsp;
                    链接：<a href="http://hellsing42.javaeye.com/blog/222286" style="color:red;">http://hellsing42.javaeye.com/blog/222286</a>&nbsp;
          发表时间: 2008年07月31日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">public   void   paint(Graphics   g)   {   
                  Graphics2D   g2d   =   (Graphics2D)g;   
                  Stroke   st   =   g2d.getStroke();   
                  Stroke   bs;   
                  //LINE_TYPE_DASHED   
                  bs   =   new   BasicStroke(1,   BasicStroke.CAP_BUTT,   
                                                            BasicStroke.JOIN_BEVEL,   0,   
                                                            new   float[]{16,   4},   0);   
                  g2d.setStroke(bs);   
                  g2d.drawLine(10,   10,   10,   500);   
    
                  g2d.setStroke(st);   
          }</pre>
<p>&nbsp;</p>
<p>设置线的宽度只要new BasicStroke(2.5f) 2.5f为宽度，可任意改变，虚线部分是如下stroke：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new&nbsp;&nbsp; BasicStroke(1,&nbsp;&nbsp; BasicStroke.CAP_BUTT,&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BasicStroke.JOIN_BEVEL,&nbsp;&nbsp; 0,&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new&nbsp;&nbsp; float[]{16,&nbsp;&nbsp; 4},&nbsp;&nbsp; 0);&nbsp;&nbsp; </p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://hellsing42.javaeye.com/blog/222286#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/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;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 31 Jul 2008 15:50:28 +0800</pubDate>
        <link>http://hellsing42.javaeye.com/blog/222286</link>
        <guid>http://hellsing42.javaeye.com/blog/222286</guid>
      </item>
          <item>
        <title>java变量基础</title>
        <author>hellsing42</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hellsing42.javaeye.com">hellsing42</a>&nbsp;
                    链接：<a href="http://hellsing42.javaeye.com/blog/221422" style="color:red;">http://hellsing42.javaeye.com/blog/221422</a>&nbsp;
          发表时间: 2008年07月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <table cellspacing="0" border="0" align="center" width="1024" cellpadding="0">
<tbody>
<tr>
<td width="34">&nbsp;</td>
<td valign="top" width="790">
<table cellspacing="0" border="0" width="100%" cellpadding="0">
<tbody>
<tr>
<td height="30" bgcolor="#6666cc">
<p>&nbsp;&nbsp;<span class="style2">变量</span></p>
</td>
</tr>
<tr>
<td class="style1" height="25">变量是指?</td>
</tr>
<tr>
<td height="25">变量是存放东西的一个场所.在程序中,为了保存某些值,就要使用到变量.在JAVA中,变量有以下几种.</td>
</tr>
<tr>
<td height="25">
<table cellspacing="0" border="1" align="center" cellpadding="0">
<tbody>
<tr>
<th align="center">
<div>分类</div>
</th><th>
<div>类型名</div>
</th><th>
<div>大小</div>
</th><th>
<div>有效范围</div>
</th><th>
<div>初始值</div>
</th>
</tr>
<tr>
<td rowspan="4" align="center">
<div><strong>&nbsp;&nbsp;整数</strong></div>
</td>
<td>
<div><strong>&nbsp;&nbsp;byte</strong></div>
</td>
<td>
<div>&nbsp;&nbsp;1byte</div>
</td>
<td>
<div>&nbsp;&nbsp;-128～+127</div>
</td>
<td>
<div>&nbsp;&nbsp;0</div>
</td>
</tr>
<tr>
<td>
<div><strong>&nbsp;&nbsp;short</strong></div>
</td>
<td>
<div>&nbsp;&nbsp;2bytes</div>
</td>
<td>
<div>&nbsp;&nbsp;-32768～+32767</div>
</td>
<td>
<div>&nbsp;&nbsp;0</div>
</td>
</tr>
<tr>
<td><strong>&nbsp;&nbsp;int</strong></td>
<td>&nbsp;&nbsp;4bytes</td>
<td>&nbsp;&nbsp;-2147483648～+2147483647</td>
<td>&nbsp;&nbsp;0</td>
</tr>
<tr>
<td><strong>&nbsp;&nbsp;long</strong></td>
<td>&nbsp;&nbsp;8bytes</td>
<td>&nbsp;&nbsp;-9223372036854775808～+9223372036854775807</td>
<td>&nbsp;&nbsp;0L</td>
</tr>
<tr>
<td rowspan="2" align="center">
<div><strong>&nbsp;&nbsp;浮点小数</strong></div>
</td>
<td><strong>&nbsp;&nbsp;float</strong></td>
<td>&nbsp;&nbsp;4bytes</td>
<td>&nbsp;&nbsp;约&plusmn;3.40282347e＋38的范围(精度是6位)</td>
<td>&nbsp;&nbsp;0.0F</td>
</tr>
<tr>
<td><strong>&nbsp;&nbsp;double</strong></td>
<td>&nbsp;&nbsp;8bytes</td>
<td>&nbsp;&nbsp;约&plusmn;1.79769313486231570e＋308的范围(精度是15位)</td>
<td>&nbsp;&nbsp;0.0</td>
</tr>
<tr>
<td align="center">
<div><strong>&nbsp;&nbsp;字符</strong></div>
</td>
<td><strong>&nbsp;&nbsp;char</strong></td>
<td>&nbsp;&nbsp;2bytes</td>
<td>&nbsp;&nbsp;'\u0000'～'\uFFFF'</td>
<td>&nbsp;&nbsp;'\u0000'</td>
</tr>
<tr>
<td align="center" width="13%">
<div><strong>&nbsp;&nbsp;真假值</strong></div>
</td>
<td width="12%">
<div><strong>&nbsp;&nbsp;boolean</strong></div>
</td>
<td width="19%">
<div>&nbsp;&nbsp;1bit</div>
</td>
<td width="37%">
<div>&nbsp;&nbsp;true或者false</div>
</td>
<td width="19%">
<div>&nbsp;&nbsp;false</div>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td class="style1" height="25">定义变量</td>
</tr>
<tr>
<td height="25">要使用变量必须先定义变量.变量的定义时,要使用到类型及变量名.</td>
</tr>
<tr>
<td height="25">[构成文]</td>
</tr>
<tr>
<td height="25">
<table cellspacing="0" border="1" bgcolor="#bed6a0" width="80%" cellpadding="0">
<tbody>
<tr>
<td height="25"><strong>&nbsp;&nbsp;类型 变量名;</strong></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td height="25">[例]</td>
</tr>
<tr>
<td height="25">
<table cellspacing="0" border="1" bgcolor="#bed6a0" width="80%" cellpadding="0">
<tbody>
<tr>
<td height="25"><strong>&nbsp;</strong>&nbsp;int x ;</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td height="25">&nbsp;</td>
</tr>
<tr>
<td class="style1" height="25">加入值</td>
</tr>
<tr>
<td height="25">可以往变量中放入一个值.这称为值的加入(代入).正确称为赋值.变量的赋值时,用变量名=值的方式来实现.</td>
</tr>
<tr>
<td height="25">[构成文]</td>
</tr>
<tr>
<td height="25">
<table cellspacing="0" border="1" bgcolor="#bed6a0" width="80%" cellpadding="0">
<tbody>
<tr>
<td height="25"><strong>&nbsp;&nbsp;变量名 = 值;</strong></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td height="25">[例] 往x变量中加入10. </td>
</tr>
<tr>
<td height="25">
<table cellspacing="0" border="1" bgcolor="#bed6a0" width="80%" cellpadding="0">
<tbody>
<tr>
<td height="25">&nbsp;&nbsp;x=10;</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td height="25"><span class="style3">定义时赋值</span></td>
</tr>
<tr>
<td height="25">变量在定义时也可以同时赋值.</td>
</tr>
<tr>
<td height="25">[构成文]</td>
</tr>
<tr>
<td height="25">
<table cellspacing="0" border="1" bgcolor="#bed6a0" width="80%" cellpadding="0">
<tbody>
<tr>
<td height="25"><strong>&nbsp; 类型 变量名 = 值; </strong></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td height="25">[例]</td>
</tr>
<tr>
<td height="25">
<table cellspacing="0" border="1" bgcolor="#bed6a0" width="80%" cellpadding="0">
<tbody>
<tr>
<td height="25"><strong>&nbsp;</strong>&nbsp;int x = 10 ;</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td class="style3" height="25">将其他变量赋值于变量</td>
</tr>
<tr>
<td height="25">将赋值于其他变量的值赋于变量的方式</td>
</tr>
<tr>
<td height="25">[构成]</td>
</tr>
<tr>
<td height="25">
<table cellspacing="0" border="1" bgcolor="#bed6a0" width="80%" cellpadding="0">
<tbody>
<tr>
<td height="25"><strong>&nbsp;&nbsp;变量1 = 变量2;</strong></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td class="style1" height="25">&nbsp;</td>
</tr>
<tr>
<td height="25"><span class="style1">类型变换</span></td>
</tr>
<tr>
<td height="25">赋值时要注意的是,变量的类型的大小问题.将浮点小数型的变量值赋值于整数型的变量时,就要进行类型的变换.</td>
</tr>
<tr>
<td height="25">[构成]</td>
</tr>
<tr>
<td height="25">
<table cellspacing="0" border="1" bgcolor="#bed6a0" width="80%" cellpadding="0">
<tbody>
<tr>
<td height="25"><strong>&nbsp;&nbsp;变量1 = (类型)变量2;</strong></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td height="25">[例] 必须进行变换的赋值</td>
</tr>
<tr>
<td height="25">
<table cellspacing="0" border="1" bgcolor="#bed6a0" width="80%" cellpadding="0">
<tbody>
<tr>
<td height="25">
<p>&nbsp;&nbsp;double x =1.234 ;<br />&nbsp;&nbsp;int y = (int)d; </p>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td height="25">&nbsp; 在以下的排列顺序中,当左边类型的变量要赋值到右边类型的变量中时,可以不用进行变换.而当右边类型的变量要赋值到左边类型的变量中时,则需要进行变换.<br />&nbsp;&nbsp;byte -&gt; short -&gt; int -&gt; long -&gt; float -&gt; double<br />另外还有: <br />char -&gt; int <br /><strong>[例]&nbsp;不需要特别进行变换的场合</strong><br />
<table cellspacing="0" border="1" bgcolor="#bed6a0" width="80%" cellpadding="0">
<tbody>
<tr>
<td height="25">&nbsp;&nbsp;int a = 10 ;<br />&nbsp;&nbsp;double b = a; </td>
</tr>
</tbody>
</table>
<br /><span class="style1">关于各个类型</span><br /><span class="style3">■byte型</span><br />表示一个字节的数据.<br /><span class="style3">■short型</span><br />表示两个字节的数据.<br /><span class="style3">■int型</span><br />表示4个字节的数据.用于存放整数的数值.<br /><span class="style3">■long型</span><br />表示8个字节的数据.可以存放比int型更大的数据.在JAVA中,由于记述时会被误认为int型,所以在数据的最后加上L字符.<br />[例]<br />long val = 1000000000000000<strong>L</strong>;<br /><span class="style3">■float型</span><br />当小数位有6位以下时,可以使用float型来存放.在JAVA中,数值的最后加上 F 来表示.<br />[例]<br />float f = 3.21<strong>F</strong>;<br /><span class="style3">■double型</span><br />小数位在15位以下时使用.<br /><span class="style3">■char型</span><br />表示1个Unicode的文字.使用char型来表示时,用单引号[']来包含要表示的数据.<br />[例]<br />char c = 'A';<br />可以用'\u0000'到'\uFFFF'为止的16进制来表示Unicode.前面的\u表示这是一个Unicode的值.<br />[例]<br />char c = '\u0041';<br /><br />.关于反斜杆[\](106日文键盘中表示为￥)escape sequence<br />以下的这些特殊的文字来表示一些特定的作用.这些被称为escape sequence<br />
<table cellspacing="0" border="1" bgcolor="#bed6a0" width="60%" cellpadding="0">
<tbody>
<tr>
<td height="20" width="40%">
<div><strong>escape sequence</strong></div>
</td>
<td height="20" width="60%">
<div><strong>说明</strong></div>
</td>
</tr>
<tr>
<td height="20" width="40%">
<div>\b</div>
</td>
<td height="20" width="60%">&nbsp;BackSpacer返回符号</td>
</tr>
<tr>
<td height="20" width="40%">
<div>\t</div>
</td>
<td height="20" width="60%">&nbsp;水平符号</td>
</tr>
<tr>
<td height="20" width="40%">
<div>\v</div>
</td>
<td height="20" width="60%">&nbsp;垂直符号</td>
</tr>
<tr>
<td height="20" width="40%">
<div>\n</div>
</td>
<td height="20" width="60%">&nbsp;换行符</td>
</tr>
<tr>
<td height="20" width="40%">
<div>\r</div>
</td>
<td height="20" width="60%">&nbsp;复归符</td>
</tr>
<tr>
<td height="20" width="40%">
<div>\"</div>
</td>
<td height="20" width="60%">&nbsp;双引号符</td>
</tr>
<tr>
<td height="20" width="40%">
<div>\'</div>
</td>
<td height="20" width="60%">&nbsp;单引号符</td>
</tr>
<tr>
<td height="20" width="40%">
<div>\\</div>
</td>
<td height="20" width="60%">&nbsp;反斜杆符</td>
</tr>
</tbody>
</table>
<p><span class="style3">■boolean型</span><br />在表示真或者伪时使用.只拥有真或者伪中的一个值. </p>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
          <br/><br/>
          <span style="color:red;">
            <a href="http://hellsing42.javaeye.com/blog/221422#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;">Windows7在微软WinHEC 2008上揭开神秘面纱</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, 30 Jul 2008 10:35:54 +0800</pubDate>
        <link>http://hellsing42.javaeye.com/blog/221422</link>
        <guid>http://hellsing42.javaeye.com/blog/221422</guid>
      </item>
          <item>
        <title>反义词</title>
        <author>hellsing42</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hellsing42.javaeye.com">hellsing42</a>&nbsp;
                    链接：<a href="http://hellsing42.javaeye.com/blog/220758" style="color:red;">http://hellsing42.javaeye.com/blog/220758</a>&nbsp;
          发表时间: 2008年07月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          tragedy:悲剧<br />comedy:戏剧
          <br/><br/>
          <span style="color:red;">
            <a href="http://hellsing42.javaeye.com/blog/220758#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/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;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 28 Jul 2008 20:10:10 +0800</pubDate>
        <link>http://hellsing42.javaeye.com/blog/220758</link>
        <guid>http://hellsing42.javaeye.com/blog/220758</guid>
      </item>
          <item>
        <title>reader和stream的区别</title>
        <author>hellsing42</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hellsing42.javaeye.com">hellsing42</a>&nbsp;
                    链接：<a href="http://hellsing42.javaeye.com/blog/218888" style="color:red;">http://hellsing42.javaeye.com/blog/218888</a>&nbsp;
          发表时间: 2008年07月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          java.io.Reader 和 java.io.InputStream 组成了 Java 输入类。Reader 用于读入16位字符，也就是 Unicode 编码的字符；而 InputStream 用于读<br /><br />入 ASCII 字符和二进制数据。 <br />在 Java 中，有不同类型的 Reader 输入流对应于不同的数据源：<br /><br />&nbsp;&nbsp;&nbsp; FileReader 用于从文件输入；<br /><br />&nbsp;&nbsp;&nbsp; CharArrayReader 用于从程序中的字符数组输入；<br /><br />&nbsp;&nbsp;&nbsp; StringReader 用于从程序中的字符串输入；<br /><br />&nbsp;&nbsp;&nbsp; PipedReader 用于读取从另一个线程中的 PipedWriter 写入管道的数据。<br /><br />相 应的也有不同类型的 InputStream 输入流对应于不同的数据源：FileInputStream，ByteArrayInputStream， StringBufferInputStream，<br /><br />PipedInputStream。另外，还有两种没有对应 Reader 类型的 InputStream 输入流：<br /><br />&nbsp;&nbsp;&nbsp; Socket 用于套接字；<br /><br />&nbsp;&nbsp;&nbsp; URLConnection 用于 URL 连接。<br /><br />这两个类使用 getInputStream() 来读取数据。<br /><br />相应的，java.io.Writer 和 java.io.OutputStream 也有类似的区别。
          <br/><br/>
          <span style="color:red;">
            <a href="http://hellsing42.javaeye.com/blog/218888#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/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;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 24 Jul 2008 10:47:49 +0800</pubDate>
        <link>http://hellsing42.javaeye.com/blog/218888</link>
        <guid>http://hellsing42.javaeye.com/blog/218888</guid>
      </item>
          <item>
        <title>今天看到个帖子，评论也和有意思</title>
        <author>hellsing42</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hellsing42.javaeye.com">hellsing42</a>&nbsp;
                    链接：<a href="http://hellsing42.javaeye.com/blog/218494" style="color:red;">http://hellsing42.javaeye.com/blog/218494</a>&nbsp;
          发表时间: 2008年07月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          原贴：<br />[心情文字] 和女同事一起玩魔兽(完结篇) 镰刀给爱点时间<br />此时我已经不知应该从何开始写起.或者说不知如何述说这个故事来跟你们分享我的哀伤. <br /><br />[::艾泽拉斯国家地理 BBS.NGACN.CC::]<br /><br />为什么是哀伤,因为我还是失败了.没追到她,甚至关系已经面临破裂. <br /><br />她家在旁边的城市,来到我所在的城市工作,她从小娇生惯养离开家容易寂寞.我开始尝试接近她,她对我防备很重,未遂.然后就沉淀了一段时间完全没有联系.其实这算一开始就失败了,因为急了点导致她滋生了反感我的念头,好在我及时撤离她的视线,so不至于无法挽回全盘皆输. <br />沉淀的这段时间,我开始谋划新策略如何接近她,当我觉得时间合适了,便再次出手了,第2次比较顺利,不过也和她的生活孤单无聊有关,否则大概也没有缝隙给我机会.有了第一次的经验,这一次,我小心翼翼的把持进度,努力控制着局势平稳的发展,正好她买了新的本本性能还不错,在我的怂恿下,她和我一起玩起了wow. <br /><br />因为有了wow这个平台,使得我终于突破了一个同事或者一个普通人的身份,升级成为她的一个朋友.每天下班以后,就开始寸步不离的跟着她带她练级,在她20级的时候,她已经迷上了这个游戏.我终于也化被动为主动.每天就2个人在若大的地图里冒险旅行,聊着无关紧要的话题,这样轻松自然的气氛彼此都很开心.渐渐的我的手机塞满了她的短信,再到后来下了游戏还互通电话,然后到现实里一起吃饭,一起玩.到后来,对于心里而言我们和男女朋友已经没有任何分别.就只剩身体上的接触外. <br /><br />有一天下班了,我约好了和她一起吃饭,因为夏天吃了饭离天黑还早,彼此都还不想回家..我就栽她去海边,我们卷了裤脚沿着海岸线慢慢的散步,蔚蓝的天空,黄昏的太阳,还有大海和沙滩,这样的意境我自己的心都已经要被融化,当时我真的觉得很幸福,我们走累了,就坐在沙滩上聊天玩沙子看天空的星座,那天天气又出奇的好,满天星,而且居然还出现了流星.后来我抱了她,也亲亲了她,她也依偎在我的怀里. <br />但是她说这样便宜我了,只许今晚.我问她为何只能今晚如此短暂.她没有回答,我也没有再多想,因为我觉得关系到了这个地步已经是十拿九稳了.可是我错了. <br /><br />她曾经告诉过我,她心没安定,也不够喜欢我,再者因为我们同一个单位工作.这些因素是导致我始终无法成为她真正的男朋友.所以顶在我头上的一直是一个叫暧昧的(buff?debuff?). <br />那个海边美丽的夜晚成为了历史,此后我与她的关系开始走下坡路.大概是因为我被那刻的假胜利冲昏了理智,感情上我从付出逐渐转变为所求,我们的话题开始越来越沉重.我的野心开始膨胀,占有欲越来越强,我失控到贪婪的想得到全部.我变成了野兽.局势越来越动荡,最后她觉得这样暧昧不好,对谁都不好,其实我也觉得不好,于是乎我又回到了起点. <br />认识她到现在,我提出过3次让她当我女朋友,昨晚是最后一次,这是我破釜沉舟的决定.我急于给自己一个答案.一个失败的答案. <br /><br />能一起玩游戏不是理由,付出多少也不是理由,便宜了我也更不是理由,大家看完就完了,不要学我.<br /><br /><br />评论1：<br />一条大蟒蛇和一条小毒蛇是朋友。 <br /><br />[::艾泽拉斯国家地理 BBS.NGACN.CC::]<br /><br />这天他们在路边发现了一只巨大的乌龟。 <br /><br />蛇兄弟想，这么大的个儿，可是一顿美餐啊。 <br /><br />蟒蛇说：我来对付他。 <br /><br />于是蟒蛇施展自己的绝技，用身体将大乌龟牢牢地缠住。 <br /><br />而大乌龟早已将身体缩进了壳里，任凭蟒蛇怎么缠绕，也无法伤害到大乌龟。 <br /><br />泄气的蟒蛇，气喘吁吁地爬到了一边。 <br /><br />大乌龟谨慎地露出脑袋，在他露出脑袋的那一瞬间，小毒蛇闪电般地在乌龟脑袋上咬了一口， <br /><br />大乌龟又急忙缩回壳中。但是几分钟后，大乌龟因为中毒而死了。 <br /><br />蟒蛇说：哇！我花了那么大力气也没能伤害乌龟，你却轻而易举地办到了啊。 <br /><br />小毒蛇说：因为我了解他的要害。 <br /><br />可是接下来的还是有一个问题，大乌龟死后依然缩在壳里，两条蛇都是吞食性的动物， <br /><br />而他们又无法脱下乌龟的外壳，只好怏怏地离开了…… <br /><br />这个故事告诉我们：即使你擅长死缠烂打，也未必能泡到那个妞，要了解那个妞才可以。 <br /><br />这个故事还告诉我们：如果你无法脱下那个妞的衣服，就不要再花力气去泡她了。 <br /><br />NGACN<br />评论2：<br />她曾经告诉过我,她心没安定,也不够喜欢我 <br />lz写了那么多，发现这一句才是关键。你和她的分离和缘分没有什么关系，纯粹是你身上缺乏一份吸引她的“魅力”以及你的情感手段单一。 <br />说句现实的话，其实一个女孩子离开家乡工作，总会想要在生活上找一个……怎么说呢，“同伴”。排遣寂寞也好，消灭孤独也罢，单身女人总会有意无意的寻求这样一种关系。这种暧昧的关系实际上也就是所谓的“朋友以上，恋人未满”。 <br />lz看似总结一些教训，实际上你并没有从这次失败的情感经历中真正学到什么。对付女人，要用温柔的态度来化解她的戒备，以体贴和关怀开头，让她感觉和你在一起的时候，有一种如沐春风般的舒畅。然后就是策略性的后退，进三步退两步，在关注她的生活的同时，刻意的流出一些暧昧的空间，让她体会到离开你之后的生活原来是如此的不同。 <br />就好像是温水煮青蛙的道理一样，不要一开始就用火热的激情来追求一个受过一定程度教育的女孩子，尤其是对有着良好家庭教养的女生，你的热情只会吓坏她。 <br />感情是要慢慢的加热的，尤其是对于普通人来说——女人总是贪心的，所以作为一个男人，你借着温柔的名义绕过女人的警戒线，然后慢慢的把她对生活的幻想和希望一点点的拉到自己的身上，让她在规划未来的时候，身旁会有着你的一个位置。而这，需要长期的努力——不是一场战役就可以获得整场战争的胜利的！ <br />另外说句不好听的话，爱情关系中总会有一个人是强势者，如果lz没有学会如何站到强势的位置，如何控制恋情加热的节奏，那么你的水锅里永远也煮不熟一只青蛙。那些优秀的女孩子不是被滚烫的热水吓走就是会觉得和你在一起温吞吞的没有什么意思，那么她们自然不会把你当作共度一生的另一半。
          <br/><br/>
          <span style="color:red;">
            <a href="http://hellsing42.javaeye.com/blog/218494#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/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;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 23 Jul 2008 11:15:35 +0800</pubDate>
        <link>http://hellsing42.javaeye.com/blog/218494</link>
        <guid>http://hellsing42.javaeye.com/blog/218494</guid>
      </item>
          <item>
        <title>111</title>
        <author>hellsing42</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hellsing42.javaeye.com">hellsing42</a>&nbsp;
                    链接：<a href="http://hellsing42.javaeye.com/blog/213672" style="color:red;">http://hellsing42.javaeye.com/blog/213672</a>&nbsp;
          发表时间: 2008年07月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          hang out with: spend time with
          <br/><br/>
          <span style="color:red;">
            <a href="http://hellsing42.javaeye.com/blog/213672#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;">Windows7在微软WinHEC 2008上揭开神秘面纱</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>Thu, 10 Jul 2008 20:01:42 +0800</pubDate>
        <link>http://hellsing42.javaeye.com/blog/213672</link>
        <guid>http://hellsing42.javaeye.com/blog/213672</guid>
      </item>
          <item>
        <title>多线程的一些问题</title>
        <author>hellsing42</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hellsing42.javaeye.com">hellsing42</a>&nbsp;
                    链接：<a href="http://hellsing42.javaeye.com/blog/212732" style="color:red;">http://hellsing42.javaeye.com/blog/212732</a>&nbsp;
          发表时间: 2008年07月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Java的线程编程非常简单。但有时会看到一些关于线程的错误用法。下面列出一些应该注意的问题。<br /><br />1．同步对象的恒定性<br />All java objects are references.<br /><br />对于局部变量和参数来说，java里面的int, float, double, boolean等基本数据类型，都在栈上。这些基本类型是无法同步的；java里面的对象（根对象是Object），全都在堆里，指向对象的reference在栈上。<br /><br />java中的同步对象，实际上是对于reference所指的“对象地址”进行同步。<br />需要注意的问题是，千万不要对同步对象重新赋值。举个例子。<br />class A implements Runnable{<br />Object lock = new Object();<br /><br />void run(){<br />for(...){<br />synchronized(lock){<br />// do something<br />...<br />lock = new Object();<br />}<br />}<br />}<br /><br />run函数里面的这段同步代码实际上是毫无意义的。因为每一次lock都给重新分配了新的对象的reference，每个线程都在新的reference同步。<br />大家可能觉得奇怪，怎么会举这么一个例子。因为我见过这样的代码，同步对象在其它的函数里被重新赋了新值。<br />这种问题很难查出来。<br />所以，一般应该把同步对象声明为final.<br />final Object lock = new Object();<br /><br /> <br /><br />使用Singleton Pattern 设计模式来获取同步对象，也是一种很好的选择。<br /><br />2．如何放置共享数据<br />实现线程，有两种方法，一种是继承Thread类，一种是实现Runnable接口。<br /><br />上面举的例子，采用实现Runnable接口的方法。本文推荐这种方法。<br /><br />首先，把需要共享的数据放在一个实现Runnable接口的类里面，然后，把这个类的实例传给多个Thread的构造方法。这样，新创建的多个Thread，都共同拥有一个Runnable实例，共享同一份数据。<br /><br />如果采用继承Thread类的方法，就只好使用static静态成员了。如果共享的数据比较多，就需要大量的static静态成员，令程序数据结构混乱，难以扩展。这种情况应该尽量避免。<br /><br />编写一段多线程代码，处理一个稍微复杂点的问题。两种方法的优劣，一试便知。<br /><br />3．同步的粒度<br />线程同步的粒度越小越好，即，线程同步的代码块越小越好。尽量避免用synchronized修饰符来声明方法。尽量使用synchronized(anObject)的方式，如果不想引入新的同步对象，使用synchronized(this)的方式。而且，synchronized代码块越小越好。<br /><br />4．线程之间的通知<br />这里使用“通知”这个词，而不用“通信”这个词，是为了避免词义的扩大化。<br /><br />线程之间的通知，通过Object对象的wait()和notify() 或notifyAll() 方法实现。<br /><br />下面用一个例子，来说明其工作原理：<br /><br />假设有两个线程，A和B。共同拥有一个同步对象，lock。<br /><br />1．首先，线程A通过synchronized(lock) 获得lock同步对象，然后调用lock.wait()函数，放弃lock同步对象，线程A停止运行，进入等待队列。<br /><br />2．线程B通过synchronized(lock) 获得线程A放弃的lock同步对象，做完一定的处理，然后调用 lock.notify() 或者lock.notifyAll() 通知等待队列里面的线程A。<br /><br />3．线程A从等待队列里面出来，进入ready队列，等待调度。<br /><br />4．线程B继续处理，出了synchronized(lock)块之后，放弃lock同步对象。<br /><br />5．线程A获得lock同步对象，继续运行。<br /><br /> <br /><br />例子代码如下：<br /><br /><pre name="code" class="java">

public class SharedResource implements Runnable{

Object lock = new Object();

 

public void run(){

// 获取当前线程的名称。

String threadName = Thread.currentThread().getName();

 

if( “A”.equals(threadName)){

synchronized(lock){ //线程A通过synchronized(lock) 获得lock同步对象

try{

System.out.println(“ A gives up lock.”);

lock.wait(); // 调用lock.wait()函数，放弃lock同步对象，

// 线程A停止运行，进入等待队列。

}catch(InterruptedException e){

}

 

// 线程A重新获得lock同步对象之后，继续运行。

System.out.println(“ A got lock again and continue to run.”);

} // end of synchronized(lock)

}

 

if( “B”.equals(threadName)){

synchronized(lock){//线程B通过synchronized(lock) 获得线程A放弃的lock同步对象

System.out.println(“B got lock.”);

 

lock.notify(); //通知等待队列里面的线程A，进入ready队列，等待调度。

 

//线程B继续处理，出了synchronized(lock)块之后，放弃lock同步对象。

System.out.println(“B gives up lock.”);

} // end of synchronized(lock)

 

boolean hasLock = Thread.holdsLock(lock); // 检查B是否拥有lock同步对象。

System.out.println(“B has lock ? -- ” +hasLock); // false.

}

}

}

 

public class TestMain{

public static void main(){

Runnable resource = new SharedResource();

 

Thread A = new Thread(resource，”A”);

A.start();

 

// 强迫主线程停止运行，以便线程A开始运行。

　　try {

Thread.sleep(500);

}catch(InterruptedException e){

}

 

Thread B = new Thread(resource，”B”);

B.start();

}

}

 
</pre><br />5．跨类的同步对象<br />对于简单的问题，可以把访问共享资源的同步代码都放在一个类里面。<br /><br />但是对于复杂的问题，我们需要把问题分为几个部分来处理，需要几个不同的类来处理问题。这时，就需要在不同的类中，共享同步对象。比如，在生产者和消费者之间共享同步对象，在读者和写者之间共享同步对象。<br /><br />如何在不同的类中，共享同步对象。有几种方法实现，<br /><br />（1）前面讲过的方法，使用static静态成员，（或者使用Singleton Pattern.）<br /><br />（2）用参数传递的方法，把同步对象传递给不同的类。<br /><br />（3）利用字符串常量的“原子性”。<br /><br /> <br /><br />对于第三种方法，这里做一下解释。一般来说，程序代码中的字符串常量经过编译之后，都具有唯一性，即，内存中不会存在两份相同的字符串常量。<br /><br />（通常情况下，C++，C语言程序编译之后，也具有同样的特性。）<br /><br />比如，我们有如下代码。<br /><br />String A = “atom”;<br /><br />String B = “atom”;<br /><br />我们有理由认为，A和B指向同一个字符串常量。即，A==B。<br /><br />注意，声明字符串变量的代码，不符合上面的规则。<br /><br />String C= new String(“atom”);<br /><br />String D = new String(“atom”);<br /><br />这里的C和D的声明是字符串变量的声明，所以，C != D。<br /><br /> <br /><br />有了上述的认识，我们就可以使用字符串常量作为同步对象。<br /><br />比如我们在不同的类中，使用synchronized(“myLock”), “myLock”.wait(),“myLock”.notify(), 这样的代码，就能够实现不同类之间的线程同步。<br /><br />本文并不强烈推荐这种用法，只是说明，有这样一种方法存在。<br /><br /> <br /><br />本文推荐第二种方法，（2）用参数传递的方法，把同步对象传递给不同的类。
          <br/><br/>
          <span style="color:red;">
            <a href="http://hellsing42.javaeye.com/blog/212732#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/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;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 08 Jul 2008 14:35:25 +0800</pubDate>
        <link>http://hellsing42.javaeye.com/blog/212732</link>
        <guid>http://hellsing42.javaeye.com/blog/212732</guid>
      </item>
          <item>
        <title>Javax.comm串口通讯类简介</title>
        <author>hellsing42</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hellsing42.javaeye.com">hellsing42</a>&nbsp;
                    链接：<a href="http://hellsing42.javaeye.com/blog/212708" style="color:red;">http://hellsing42.javaeye.com/blog/212708</a>&nbsp;
          发表时间: 2008年07月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Javax.comm简介<br />&nbsp;&nbsp;&nbsp; Javax.comm是Sun公司提供的，用于开发平台独立的通讯应用程序的扩展API。（ps：这里javax的x很准确地表明了它是一个扩展包，而不是核心包（core package），但由于历史原因，javax下的并不都是扩展包，比如swing包已经是Java核心架构的一部分了，不过为了与Java1.1编码兼容，仍使用javax.swing。）javax.comm可以访问RS232接口（串口）及有限制地访问IEEE-1284（并口）。<br /><br />下载<br />&nbsp;&nbsp;&nbsp; 需要到其官方主页http://java.sun.com/products/javacomm/下载这个API，目前的最新版本是3.0。不过可惜的是，Sun目前没有推出此API在Windows平台下的3.0版本，主页上列出的三个版本，分别是运行在x86和Sparc结构下的Solaris系统，以及x86下的Linux系统。要下载Windows版本只能去寻找较老的版本了。我所找到的2个网址是http: //llk.media.mit.edu/projects/cricket/software/javaSerial.zip（两个文件夹里面有所需的 3个文件），http://mdubuc.freeshell.org/Jolt/javacomm20-win32.zip和（完整的2.0版本，还有 examples）。<br /><br />安装<br />&nbsp;&nbsp;&nbsp; 这里的所谓安装就是把三个重要的文件放到指定的目录下。<br />&nbsp;&nbsp;&nbsp; 将下载的文件解压缩后，在\javacomm20-win32\commapi目录下有必需的三个文件comm.jar，javax.comm. properties和win32comm.dll。将文件comm.jar拷贝到%JAVA_HOME%\jre\lib\ext;文件 javax.comm. properties拷贝到%JAVA_HOME%\jre\lib; 文件win32comm.dll拷贝到%JAVA_HOME%\bin。注意%JAVA_HOME%是jdk的路径，而非jre。<br /><br />API<br />在javax.comm下有13个类和接口，分别是<br /><br />4个接口<br />CommDriver 可负载设备（the loadable device）驱动程序接口的一部分<br />CommPortOwnershipListener 传递各种通讯端口的所有权事件<br />ParallelPortEventListener 传递并行端口事件<br />SerialPortEventListener 传递串行端口事件<br /><br />6个类<br />CommPort 通讯端口<br />CommPortIdentifier通讯端口管理<br />ParallelPort 并行通讯端口<br />ParallelPortEvent 并行端口事件<br />SerialPort RS-232串行通讯端口<br />SerialPortEvent 串行端口事件<br /><br />3个异常类<br />NoSuchPortException 当驱动程序不能找到指定端口时抛出<br />PortInUseException 当碰到指定端口正在使用中时抛出<br />UnsupportedCommOperationException 驱动程序不允许指定操作时抛出<br /><br />实例<br />&nbsp;&nbsp;&nbsp; 同API一起下载的还有一个examples文件，里面有6个程序。首先看最简单的读、写程序。<br /><br />读串口的例程<br /><pre name="code" class="java">
import java.io.*;
import java.util.*;
import javax.comm.*;

public class SimpleRead implements Runnable, SerialPortEventListener {

    static CommPortIdentifier portId;
    static Enumeration portList;//枚举类

    InputStream inputStream;
    SerialPort serialPort;
    Thread readThread;

    public static void main(String[] args) {

        portList = CommPortIdentifier.getPortIdentifiers();/*不带参数的getPortIdentifiers方法获得一个枚举对象，该对象又包含了系统中管理每个端口的CommPortIdentifier对象。注意这里的端口不仅仅是指串口，也包括并口。这个方法还可以带参数。getPortIdentifiers(CommPort)获得与已经被应用程序打开的端口相对应的CommPortIdentifier对象。 getPortIdentifier(String portName)获取指定端口名（比如“COM1”）的CommPortIdentifier对象。*/

        while (portList.hasMoreElements()) {
            portId = (CommPortIdentifier) portList.nextElement();
            if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL)/*getPortType方法返回端口类型*/ {
                // if (portId.getName().equals("COM1"))/* 找Windows下的第一个串口*/ {
                if (portId.getName().equals("/dev/term/a"))/*找Unix-like系统下的第一个串口*/ {
                    SimpleRead reader = new SimpleRead();
                }
            }
        }
    }

    public SimpleRead() {
        try {
            serialPort = (SerialPort) portId.open("SimpleReadApp", 2000);/* open方法打开通讯端口，获得一个CommPort对象。它使程序独占端口。如果端口正被其他应用程序占用，将使用 CommPortOwnershipListener事件机制，传递一个PORT_OWNERSHIP_REQUESTED事件。每个端口都关联一个 InputStream 何一个OutputStream。如果端口是用open方法打开的，那么任何的getInputStream都将返回相同的数据流对象，除非有close 被调用。有两个参数，第一个为应用程序名；第二个参数是在端口打开时阻塞等待的毫秒数。*/
        } catch (PortInUseException e) {}
        try {
            inputStream = serialPort.getInputStream();/*获取端口的输入流对象*/
        } catch (IOException e) {}
    try {
            serialPort.addEventListener(this);/*注册一个SerialPortEventListener事件来监听串口事件*/
    } catch (TooManyListenersException e) {}

        serialPort.notifyOnDataAvailable(true);/*数据可用*/

        try {
            serialPort.setSerialPortParams(9600,
                SerialPort.DATABITS_8,
                SerialPort.STOPBITS_1,
                SerialPort.PARITY_NONE);/*设置串口初始化参数，依次是波特率，数据位，停止位和校验*/
        } catch (UnsupportedCommOperationException e) {}

        readThread = new Thread(this);
        readThread.start();
    }

    public void run() {
        try {
            Thread.sleep(20000);
        } catch (InterruptedException e) {}
    }

//串口事件
    public void serialEvent(SerialPortEvent event) {

        switch(event.getEventType()) {
        case SerialPortEvent.BI:/*Break interrupt,通讯中断*/
        case SerialPortEvent.OE:/*Overrun error，溢位错误*/
        case SerialPortEvent.FE:/*Framing error，传帧错误*/
        case SerialPortEvent.PE:/*Parity error，校验错误*/
        case SerialPortEvent.CD:/*Carrier detect，载波检测*/
        case SerialPortEvent.CTS:/*Clear to send，清除发送*/
        case SerialPortEvent.DSR:/*Data set ready，数据设备就绪*/
        case SerialPortEvent.RI:/*Ring indicator，响铃指示*/
        case SerialPortEvent.OUTPUT_BUFFER_EMPTY:/*Output buffer is empty，输出缓冲区清空*/
            break;

        case SerialPortEvent.DATA_AVAILABLE:/*Data available at the serial port，端口有可用数据。读到缓冲数组，输出到终端*/
            byte[] readBuffer = new byte[20];

            try {
                while (inputStream.available() > 0) {
                    int numBytes = inputStream.read(readBuffer);
                }
                System.out.print(new String(readBuffer));
            } catch (IOException e) {}
            break;
        }
    }
}
(PS:不推荐Thread的这种用法，详见《Core Java VolumeII》)

写串口的例程
    把字符串"Hello, world!\n"写到系统的第一个串口

import java.io.*;
import java.util.*;
import javax.comm.*;

public class SimpleWrite {
    static Enumeration portList;
    static CommPortIdentifier portId;
    static String messageString = "Hello, world!\n";
    static SerialPort serialPort;
    static OutputStream outputStream;

    public static void main(String[] args) {
        portList = CommPortIdentifier.getPortIdentifiers();

        while (portList.hasMoreElements()) {
            portId = (CommPortIdentifier) portList.nextElement();
            if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
                // if (portId.getName().equals("COM1")) {
                if (portId.getName().equals("/dev/term/a")) {
                    try {
                        serialPort = (SerialPort)
                            portId.open("SimpleWriteApp", 2000);
                    } catch (PortInUseException e) {}
                    try {
                        outputStream = serialPort.getOutputStream();
                    } catch (IOException e) {}
                    try {
                        serialPort.setSerialPortParams(9600,
                            SerialPort.DATABITS_8,
                            SerialPort.STOPBITS_1,
                            SerialPort.PARITY_NONE);
                    } catch (UnsupportedCommOperationException e) {}
                    try {
                        outputStream.write(messageString.getBytes());
                    } catch (IOException e) {}
                }
            }
        }
    }
}
</pre><br /><br />&nbsp;&nbsp;&nbsp; 上面两个例程都经过了简化，在打开端口，并且传输结束后没有关闭数据流和串口。在例程中我们看到CommPortIdentifier提供了打开通讯端口的方法open，但却没有相应关闭端口的方法，关闭端口需要调用javax.comm.CommPort类的close()。CommPort是这个包中的一个高级抽象，它定义了端口可作的各种事情：获取I/O数据流对象，控制缓冲区大小，调整输入的处理。
          <br/><br/>
          <span style="color:red;">
            <a href="http://hellsing42.javaeye.com/blog/212708#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/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;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 08 Jul 2008 13:33:08 +0800</pubDate>
        <link>http://hellsing42.javaeye.com/blog/212708</link>
        <guid>http://hellsing42.javaeye.com/blog/212708</guid>
      </item>
          <item>
        <title>111</title>
        <author>hellsing42</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hellsing42.javaeye.com">hellsing42</a>&nbsp;
                    链接：<a href="http://hellsing42.javaeye.com/blog/212494" style="color:red;">http://hellsing42.javaeye.com/blog/212494</a>&nbsp;
          发表时间: 2008年07月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          taper off:become graduly less
          <br/><br/>
          <span style="color:red;">
            <a href="http://hellsing42.javaeye.com/blog/212494#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/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;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 07 Jul 2008 21:35:16 +0800</pubDate>
        <link>http://hellsing42.javaeye.com/blog/212494</link>
        <guid>http://hellsing42.javaeye.com/blog/212494</guid>
      </item>
          <item>
        <title>111</title>
        <author>hellsing42</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hellsing42.javaeye.com">hellsing42</a>&nbsp;
                    链接：<a href="http://hellsing42.javaeye.com/blog/211236" style="color:red;">http://hellsing42.javaeye.com/blog/211236</a>&nbsp;
          发表时间: 2008年07月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          kick in: begin to have a effect<br />set out: start
          <br/><br/>
          <span style="color:red;">
            <a href="http://hellsing42.javaeye.com/blog/211236#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/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;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 03 Jul 2008 19:45:07 +0800</pubDate>
        <link>http://hellsing42.javaeye.com/blog/211236</link>
        <guid>http://hellsing42.javaeye.com/blog/211236</guid>
      </item>
          <item>
        <title>111</title>
        <author>hellsing42</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hellsing42.javaeye.com">hellsing42</a>&nbsp;
                    链接：<a href="http://hellsing42.javaeye.com/blog/210762" style="color:red;">http://hellsing42.javaeye.com/blog/210762</a>&nbsp;
          发表时间: 2008年07月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          off the hook: free of responsibility<br />fill out: complete
          <br/><br/>
          <span style="color:red;">
            <a href="http://hellsing42.javaeye.com/blog/210762#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;">Windows7在微软WinHEC 2008上揭开神秘面纱</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, 02 Jul 2008 20:07:20 +0800</pubDate>
        <link>http://hellsing42.javaeye.com/blog/210762</link>
        <guid>http://hellsing42.javaeye.com/blog/210762</guid>
      </item>
          <item>
        <title>111</title>
        <author>hellsing42</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hellsing42.javaeye.com">hellsing42</a>&nbsp;
                    链接：<a href="http://hellsing42.javaeye.com/blog/210277" style="color:red;">http://hellsing42.javaeye.com/blog/210277</a>&nbsp;
          发表时间: 2008年07月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          horizontal： 水平的<br />vertical:垂直的
          <br/><br/>
          <span style="color:red;">
            <a href="http://hellsing42.javaeye.com/blog/210277#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/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;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 01 Jul 2008 20:08:26 +0800</pubDate>
        <link>http://hellsing42.javaeye.com/blog/210277</link>
        <guid>http://hellsing42.javaeye.com/blog/210277</guid>
      </item>
          <item>
        <title>Java命令行应用</title>
        <author>hellsing42</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hellsing42.javaeye.com">hellsing42</a>&nbsp;
                    链接：<a href="http://hellsing42.javaeye.com/blog/209633" style="color:red;">http://hellsing42.javaeye.com/blog/209633</a>&nbsp;
          发表时间: 2008年06月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          主要介绍java和javac命令的使用，<br />分带package和不带package,<br />如果要用到第3方包，则使用-classpath参数<br /><br />1.不带package<br />Hello.java<br /><br />public class Hello<br />{<br />&nbsp;&nbsp; public static void main(String[] args){<br />&nbsp;&nbsp; System.out.println("hello");<br />&nbsp; }<br />}<br /><br />c:/java/hello/Hello.java<br />编译<br />c:/java/hello>javac Hello.java<br />生成class文件<br />c:/java/hello/Hello.class<br />运行<br />c:/java/hello>java Hello<br /><br />2.带package的情况<br />源文件应按包目录放好，这绝对是个好习惯<br />Hello.java<br /><br />package my;//注意该句<br />public class Hello<br />{<br />&nbsp;&nbsp; public static void main(String[] args){<br />&nbsp;&nbsp; System.out.println("hello");<br />&nbsp; }<br />}<br /><br />c:/java/hello/my/Hello.java<br />编译<br />c:/java/hello/my>javac Hello.java<br />生成class文件<br />c:/java/hello/my/Hello.class<br />运行<br />c:/java/hello>java my.Hello<br /><br /><br />3.-classpath参数的使用<br /><br />javac -classpath .;jar01.jar;jar02.jar;……;jarN.jar&nbsp;&nbsp; class_name.java<br />java -classpath .;jar01.jar;jar02.jar;……;jarN.jar&nbsp;&nbsp; main_class_name
          <br/><br/>
          <span style="color:red;">
            <a href="http://hellsing42.javaeye.com/blog/209633#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;">Windows7在微软WinHEC 2008上揭开神秘面纱</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, 30 Jun 2008 10:40:01 +0800</pubDate>
        <link>http://hellsing42.javaeye.com/blog/209633</link>
        <guid>http://hellsing42.javaeye.com/blog/209633</guid>
      </item>
          <item>
        <title>111</title>
        <author>hellsing42</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hellsing42.javaeye.com">hellsing42</a>&nbsp;
                    链接：<a href="http://hellsing42.javaeye.com/blog/208329" style="color:red;">http://hellsing42.javaeye.com/blog/208329</a>&nbsp;
          发表时间: 2008年06月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          turn one's thought to: begin to think about
          <br/><br/>
          <span style="color:red;">
            <a href="http://hellsing42.javaeye.com/blog/208329#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;">Windows7在微软WinHEC 2008上揭开神秘面纱</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>Thu, 26 Jun 2008 19:04:00 +0800</pubDate>
        <link>http://hellsing42.javaeye.com/blog/208329</link>
        <guid>http://hellsing42.javaeye.com/blog/208329</guid>
      </item>
          <item>
        <title>111</title>
        <author>hellsing42</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hellsing42.javaeye.com">hellsing42</a>&nbsp;
                    链接：<a href="http://hellsing42.javaeye.com/blog/204307" style="color:red;">http://hellsing42.javaeye.com/blog/204307</a>&nbsp;
          发表时间: 2008年06月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          set the stage for: provide the background or foundation for<br />run across: encoutner
          <br/><br/>
          <span style="color:red;">
            <a href="http://hellsing42.javaeye.com/blog/204307#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/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;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 16 Jun 2008 20:30:28 +0800</pubDate>
        <link>http://hellsing42.javaeye.com/blog/204307</link>
        <guid>http://hellsing42.javaeye.com/blog/204307</guid>
      </item>
          <item>
        <title>111</title>
        <author>hellsing42</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hellsing42.javaeye.com">hellsing42</a>&nbsp;
                    链接：<a href="http://hellsing42.javaeye.com/blog/202597" style="color:red;">http://hellsing42.javaeye.com/blog/202597</a>&nbsp;
          发表时间: 2008年06月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          ship off: send<br />grind down: reduce by force<br />hand in hand: together<br />draw attention: attract attetion
          <br/><br/>
          <span style="color:red;">
            <a href="http://hellsing42.javaeye.com/blog/202597#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/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;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 12 Jun 2008 19:19:32 +0800</pubDate>
        <link>http://hellsing42.javaeye.com/blog/202597</link>
        <guid>http://hellsing42.javaeye.com/blog/202597</guid>
      </item>
          <item>
        <title>心情...</title>
        <author>hellsing42</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hellsing42.javaeye.com">hellsing42</a>&nbsp;
                    链接：<a href="http://hellsing42.javaeye.com/blog/202044" style="color:red;">http://hellsing42.javaeye.com/blog/202044</a>&nbsp;
          发表时间: 2008年06月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          失恋时，只有2种可能，要么你爱她她不爱你，或者相反。那么，当你爱的人不再爱你，或者从来没爱过你时，你没有遗憾，因为你失去的只是一个不爱你的人而已。 <br />任何事没有永远，也别问怎样才能永远。生活有很多无奈，请尽量充实自己，充实生活。请善待生活……
          <br/><br/>
          <span style="color:red;">
            <a href="http://hellsing42.javaeye.com/blog/202044#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/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;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 11 Jun 2008 10:39:53 +0800</pubDate>
        <link>http://hellsing42.javaeye.com/blog/202044</link>
        <guid>http://hellsing42.javaeye.com/blog/202044</guid>
      </item>
          <item>
        <title>111</title>
        <author>hellsing42</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hellsing42.javaeye.com">hellsing42</a>&nbsp;
                    链接：<a href="http://hellsing42.javaeye.com/blog/199855" style="color:red;">http://hellsing42.javaeye.com/blog/199855</a>&nbsp;
          发表时间: 2008年06月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          drive off: 迫使离开，驱赶<br />gobble up:吃光
          <br/><br/>
          <span style="color:red;">
            <a href="http://hellsing42.javaeye.com/blog/199855#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;">Windows7在微软WinHEC 2008上揭开神秘面纱</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>Tue, 03 Jun 2008 20:24:47 +0800</pubDate>
        <link>http://hellsing42.javaeye.com/blog/199855</link>
        <guid>http://hellsing42.javaeye.com/blog/199855</guid>
      </item>
          <item>
        <title>111</title>
        <author>hellsing42</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hellsing42.javaeye.com">hellsing42</a>&nbsp;
                    链接：<a href="http://hellsing42.javaeye.com/blog/199533" style="color:red;">http://hellsing42.javaeye.com/blog/199533</a>&nbsp;
          发表时间: 2008年06月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          tell sth from sth: 辨别2者区别<br />take for granted: become used to<br />bump into: 撞上<br />break down: 分解，分类<br />take on: 承担
          <br/><br/>
          <span style="color:red;">
            <a href="http://hellsing42.javaeye.com/blog/199533#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;">Windows7在微软WinHEC 2008上揭开神秘面纱</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, 02 Jun 2008 20:28:38 +0800</pubDate>
        <link>http://hellsing42.javaeye.com/blog/199533</link>
        <guid>http://hellsing42.javaeye.com/blog/199533</guid>
      </item>
          <item>
        <title>在使用ArrayList时注意里面对象是否都是新的内存</title>
        <author>hellsing42</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hellsing42.javaeye.com">hellsing42</a>&nbsp;
                    链接：<a href="http://hellsing42.javaeye.com/blog/199477" style="color:red;">http://hellsing42.javaeye.com/blog/199477</a>&nbsp;
          发表时间: 2008年06月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          遇到个这样的错误<br /><pre name="code" class="java">    
         byte[] bKey=new byte[1];

         ArrayList byteList=new ArrayList();
 for(int i=0;i&lt;10;i++){
         MessagePacket packet=new MessagePacket();
           packet.setKey(bKey);
            byteList.add(packet);  
          }
  for(int j=0;j&lt;byteList.size();j++){
         System.out.println(((MessagePacket)byteList.get(i)).getKey()[0])
   }
</pre><br />由上代码输出会发现对象MessagePacket里的属性key都变成了9，因为只在循环外创建了一个新的对象bKey，而把他的引用给了10个MessagePacket对象，只要此值一变，10个对象里的属性跟着全变。。。导致错误，所以应该把<pre name="code" class="java">    byte[] bKey=new byte[1];</pre>放到循环里，这样就创建了10个对象并且将其引用给了bKey再由他分发到MessagePacket里，这样每个MessagePacket下的key都是不同的对象（即不同的内存空间，否则其实是同一个东西。。。），就像烂大街的String的引用，虽然简单，但还是犯错。。。。搞了一下午。。。
          <br/><br/>
          <span style="color:red;">
            <a href="http://hellsing42.javaeye.com/blog/199477#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;">Windows7在微软WinHEC 2008上揭开神秘面纱</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, 02 Jun 2008 16:46:49 +0800</pubDate>
        <link>http://hellsing42.javaeye.com/blog/199477</link>
        <guid>http://hellsing42.javaeye.com/blog/199477</guid>
      </item>
          <item>
        <title>111</title>
        <author>hellsing42</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hellsing42.javaeye.com">hellsing42</a>&nbsp;
                    链接：<a href="http://hellsing42.javaeye.com/blog/198439" style="color:red;">http://hellsing42.javaeye.com/blog/198439</a>&nbsp;
          发表时间: 2008年05月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          come out of nowwhere:appear suddenly&nbsp; and unexpectedly
          <br/><br/>
          <span style="color:red;">
            <a href="http://hellsing42.javaeye.com/blog/198439#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/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;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 29 May 2008 21:01:37 +0800</pubDate>
        <link>http://hellsing42.javaeye.com/blog/198439</link>
        <guid>http://hellsing42.javaeye.com/blog/198439</guid>
      </item>
      </channel>
</rss>