﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-难能之理宜停，难处之人宜厚，难处之事宜缓，难成之功宜智。</title><link>http://www.blogjava.net/Weibo-Forum/</link><description>“道”就是指要自己才能走遍天下，“德”指两个人要直心相对.</description><language>zh-cn</language><lastBuildDate>Tue, 28 Apr 2026 19:02:58 GMT</lastBuildDate><pubDate>Tue, 28 Apr 2026 19:02:58 GMT</pubDate><ttl>60</ttl><item><title>Java Annotation入门</title><link>http://www.blogjava.net/Weibo-Forum/archive/2006/04/13/40833.html</link><dc:creator>微薄社区</dc:creator><author>微薄社区</author><pubDate>Thu, 13 Apr 2006 03:16:00 GMT</pubDate><guid>http://www.blogjava.net/Weibo-Forum/archive/2006/04/13/40833.html</guid><wfw:comment>http://www.blogjava.net/Weibo-Forum/comments/40833.html</wfw:comment><comments>http://www.blogjava.net/Weibo-Forum/archive/2006/04/13/40833.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Weibo-Forum/comments/commentRss/40833.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Weibo-Forum/services/trackbacks/40833.html</trackback:ping><description><![CDATA[
		<center>
				<span style="FONT-SIZE: 20px">
						<b>Java Annotation入门</b>
				</span>
		</center>
		<br />
		<center>作者：<a href="http://blog.matrix.org.cn/page/cleverpig" target="_new">cleverpig</a></center>
		<br />
		<br />
		<br />
		<br />
		<br />
		<span style="COLOR: red">版权声明：本文可以自由转载，转载时请务必以超链接形式标明文章原始出处和作者信息及本声明</span>
		<br />作者:cleverpig(作者的Blog:<a href="http://blog.matrix.org.cn/page/cleverpig" target="_new">http://blog.matrix.org.cn/page/cleverpig</a>)<br />原文:[http://www.matrix.org.cn/resource/article/44/44048_Java+Annotation.html]http://www.matrix.org.cn/resource/article/44/44048_Java+Annotation.html[/url]<br />关键字:Java,annotation,标注<br /><br /><br /><span style="COLOR: blue">摘要：</span><br />本文针对java初学者或者annotation初次使用者全面地说明了annotation的使用方法、定义方式、分类。初学者可以通过以上的说明制作简单的annotation程序，但是对于一些高级的annotation应用（例如使用自定义annotation生成javabean映射xml文件）还需要进一步的研究和探讨。涉及到深入annotation的内容，作者将在后文《Java Annotation高级应用》中谈到。<br /><br />同时，annotation运行存在两种方式：运行时、编译时。上文中讨论的都是在运行时的annotation应用，但在编译时的annotation应用还没有涉及，<br /><br /><span style="COLOR: blue">一、为什么使用Annotation：</span><br /><br />在JAVA应用中，我们常遇到一些需要使用模版代码。例如，为了编写一个JAX-RPC web service，我们必须提供一对接口和实现作为模版代码。如果使用annotation对远程访问的方法代码进行修饰的话，这个模版就能够使用工具自动生成。<br />另外，一些API需要使用与程序代码同时维护的附属文件。例如，JavaBeans需要一个BeanInfo Class与一个Bean同时使用/维护，而EJB则同样需要一个部署描述符。此时在程序中使用annotation来维护这些附属文件的信息将十分便利而且减少了错误。<br /><br /><span style="COLOR: blue">二、Annotation工作方式：</span><br /><br />在5.0版之前的Java平台已经具有了一些ad hoc annotation机制。比如，使用transient修饰符来标识一个成员变量在序列化子系统中应被忽略。而@deprecated这个javadoc tag也是一个ad hoc annotation用来说明一个方法已过时。从Java5.0版发布以来，5.0平台提供了一个正式的annotation功能：允许开发者定义、使用自己的annoatation类型。此功能由一个定义annotation类型的语法和一个描述annotation声明的语法，读取annotaion的API，一个使用annotation修饰的class文件，一个annotation处理工具（apt）组成。<br />annotation并不直接影响代码语义，但是它能够工作的方式被看作类似程序的工具或者类库，它会反过来对正在运行的程序语义有所影响。annotation可以从源文件、class文件或者以在运行时反射的多种方式被读取。<br />当然annotation在某种程度上使javadoc tag更加完整。一般情况下，如果这个标记对java文档产生影响或者用于生成java文档的话，它应该作为一个javadoc tag；否则将作为一个annotation。<br /><br /><span style="COLOR: blue">三、Annotation使用方法：</span><br /><br /><b>1。类型声明方式：</b><br />通常，应用程序并不是必须定义annotation类型，但是定义annotation类型并非难事。Annotation类型声明于一般的接口声明极为类似，区别只在于它在interface关键字前面使用“@”符号。<br />annotation类型的每个方法声明定义了一个annotation类型成员，但方法声明不必有参数或者异常声明；方法返回值的类型被限制在以下的范围：primitives、String、Class、enums、annotation和前面类型的数组；方法可以有默认值。<br /><br />下面是一个简单的annotation类型声明：<br /><b>清单1:</b><br /><pre class="overflow"><br />    /**<br />     * Describes the Request-For-Enhancement(RFE) that led<br />     * to the presence of the annotated API element.<br />     */<br />    public @interface RequestForEnhancement {<br />        int    id();<br />        String synopsis();<br />        String engineer() default "[unassigned]"; <br />        String date();    default "[unimplemented]"; <br />    }<br /></pre><br />代码中只定义了一个annotation类型RequestForEnhancement。<br /><br /><b>2。修饰方法的annotation声明方式：</b><br />annotation是一种修饰符，能够如其它修饰符（如public、static、final）一般使用。习惯用法是annotaions用在其它的修饰符前面。annotations由“@+annotation类型+带有括号的成员-值列表”组成。这些成员的值必须是编译时常量（即在运行时不变）。<br /><br />A：下面是一个使用了RequestForEnhancement annotation的方法声明：<br /><b>清单2:</b><br /><pre class="overflow"><br />    @RequestForEnhancement(<br />        id       = 2868724,<br />        synopsis = "Enable time-travel",<br />        engineer = "Mr. Peabody",<br />        date     = "4/1/3007"<br />    )<br />    public static void travelThroughTime(Date destination) { ... }<br /></pre><br /><br />B：当声明一个没有成员的annotation类型声明时，可使用以下方式：<br /><b>清单3:</b><br /><pre class="overflow"><br />    /**<br />     * Indicates that the specification of the annotated API element<br />     * is preliminary and subject to change.<br />     */<br />    public @interface Preliminary { }<br /></pre><br /><br />作为上面没有成员的annotation类型声明的简写方式：<br /><b>清单4:</b><br /><pre class="overflow"><br />    @Preliminary public class TimeTravel { ... }<br /></pre><br /><br />C：如果在annotations中只有唯一一个成员，则该成员应命名为value：<br /><b>清单5:</b><br /><pre class="overflow"><br />    /**<br />     * Associates a copyright notice with the annotated API element.<br />     */<br />    public @interface Copyright {<br />        String value();<br />    }<br /></pre><br /><br />更为方便的是对于具有唯一成员且成员名为value的annotation（如上文），在其使用时可以忽略掉成员名和赋值号（=）：<br /><b>清单6:</b><br /><pre class="overflow"><br />    @Copyright("2002 Yoyodyne Propulsion Systems")<br />    public class OscillationOverthruster { ... }<br /></pre><br /><br /><b>3。一个使用实例：</b><br />结合上面所讲的，我们在这里建立一个简单的基于annotation测试框架。首先我们需要一个annotation类型来表示某个方法是一个应该被测试工具运行的测试方法。<br /><b>清单7:</b><br /><pre class="overflow"><br />    import java.lang.annotation.*;<br /><br />    /**<br />     * Indicates that the annotated method is a test method.<br />     * This annotation should be used only on parameterless static methods.<br />     */<br />    @Retention(RetentionPolicy.RUNTIME)<br />    @Target(ElementType.METHOD)<br />    public @interface Test { }<br /></pre><br /><br />值得注意的是annotaion类型声明是可以标注自己的，这样的annotation被称为“meta-annotations”。<br /><br />在上面的代码中，@Retention(RetentionPolicy.RUNTIME)这个meta-annotation表示了此类型的annotation将被虚拟机保留使其能够在运行时通过反射被读取。而@Target(ElementType.METHOD)表示此类型的annotation只能用于修饰方法声明。<br /><br />下面是一个简单的程序，其中部分方法被上面的annotation所标注：<br /><b>清单8:</b><br /><pre class="overflow"><br />    public class Foo {<br />        @Test public static void m1() { }<br />        public static void m2() { }<br />        @Test public static void m3() {<br />            throw new RuntimeException("Boom");<br />        }<br />        public static void m4() { }<br />        @Test public static void m5() { }<br />        public static void m6() { }<br />        @Test public static void m7() {<br />            throw new RuntimeException("Crash");<br />        }<br />        public static void m8() { }<br />    }<br /><br />Here is the testing tool:<br /><br />    import java.lang.reflect.*;<br /><br />    public class RunTests {<br />       public static void main(String[] args) throws Exception {<br />          int passed = 0, failed = 0;<br />          for (Method m : Class.forName(args[0]).getMethods()) {<br />             if (m.isAnnotationPresent(Test.class)) {<br />                try {<br />                   m.invoke(null);<br />                   passed++;<br />                } catch (Throwable ex) {<br />                   System.out.printf("Test %s failed: %s %n", m, ex.getCause());<br />                   failed++;<br />                }<br />             }<br />          }<br />          System.out.printf("Passed: %d, Failed %d%n", passed, failed);<br />       }<br />    }<br /></pre><br /><br />这个程序从命令行参数中取出类名，并且遍历此类的所有方法，尝试调用其中被上面的测试annotation类型标注过的方法。在此过程中为了找出哪些方法被annotation类型标注过，需要使用反射的方式执行此查询。如果在调用方法时抛出异常，此方法被认为已经失败，并打印一个失败报告。最后，打印运行通过/失败的方法数量。<br />下面文字表示了如何运行这个基于annotation的测试工具：<br /><br /><b>清单9:</b><br /><pre class="overflow"><br />    $ java RunTests Foo<br />    Test public static void Foo.m3() failed: java.lang.RuntimeException: Boom <br />    Test public static void Foo.m7() failed: java.lang.RuntimeException: Crash <br />    Passed: 2, Failed 2<br /></pre><br /><br /><span style="COLOR: blue">四、Annotation分类：</span><br /><br />根据annotation的使用方法和用途主要分为以下几类：<br /><br /><b>1。内建Annotation——Java5.0版在java语法中经常用到的内建Annotation：</b><br />@Deprecated用于修饰已经过时的方法；<br />@Override用于修饰此方法覆盖了父类的方法（而非重载）；<br />@SuppressWarnings用于通知java编译器禁止特定的编译警告。<br /><br />下面代码展示了内建Annotation类型的用法：<br /><b>清单10:</b><br /><pre class="overflow"><br />package com.bjinfotech.practice.annotation;<br /><br />/**<br /> * 演示如何使用java5内建的annotation<br /> * 参考资料：<br /> * http://java.sun.com/docs/books/tutorial/java/javaOO/annotations.html<br /> * http://java.sun.com/j2se/1.5.0/docs/guide/language/annotations.html<br /> * http://mindprod.com/jgloss/annotations.html<br /> * @author cleverpig<br /> *<br /> */<br />import java.util.List;<br /><br />public class UsingBuiltInAnnotation {<br />        //食物类<br />        class Food{}<br />        //干草类<br />        class Hay extends Food{}<br />        //动物类<br />        class Animal{<br />                Food getFood(){<br />                        return null;<br />                }<br />                //使用Annotation声明Deprecated方法<br />                @Deprecated<br />                void deprecatedMethod(){<br />                }<br />        }<br />        //马类-继承动物类<br />        class Horse extends Animal{<br />                //使用Annotation声明覆盖方法<br />                @Override<br />                Hay getFood(){<br />                        return new Hay();<br />                }<br />                //使用Annotation声明禁止警告<br />                @SuppressWarnings({"deprecation","unchecked"})<br />                void callDeprecatedMethod(List horseGroup){<br />                        Animal an=new Animal();<br />                        an.deprecatedMethod();<br />                        horseGroup.add(an);<br />                }<br />        }<br />}<br /></pre><br /><br /><b>2。开发者自定义Annotation：由开发者自定义Annotation类型。</b><br />下面是一个使用annotation进行方法测试的sample：<br /><br />AnnotationDefineForTestFunction类型定义如下：<br /><b>清单11:</b><br /><pre class="overflow"><br />package com.bjinfotech.practice.annotation;<br /><br />import java.lang.annotation.*;<br />/**<br /> * 定义annotation<br /> * @author cleverpig<br /> *<br /> */<br />//加载在VM中，在运行时进行映射<br />@Retention(RetentionPolicy.RUNTIME)<br />//限定此annotation只能标示方法<br />@Target(ElementType.METHOD)<br />public @interface AnnotationDefineForTestFunction{}<br /></pre><br /><br />测试annotation的代码如下：<br /><br /><b>清单12:</b><br /><pre class="overflow"><br />package com.bjinfotech.practice.annotation;<br /><br />import java.lang.reflect.*;<br /><br />/**<br /> * 一个实例程序应用前面定义的Annotation：AnnotationDefineForTestFunction<br /> * @author cleverpig<br /> *<br /> */<br />public class UsingAnnotation {<br />        @AnnotationDefineForTestFunction public static void method01(){}<br />        <br />        public static void method02(){}<br />        <br />        @AnnotationDefineForTestFunction public static void method03(){<br />                throw new RuntimeException("method03");<br />        }<br />        <br />        public static void method04(){<br />                throw new RuntimeException("method04");<br />        }<br />        <br />        public static void main(String[] argv) throws Exception{<br />                int passed = 0, failed = 0;<br />                //被检测的类名<br />                String className="com.bjinfotech.practice.annotation.UsingAnnotation";<br />                //逐个检查此类的方法，当其方法使用annotation声明时调用此方法<br />            for (Method m : Class.forName(className).getMethods()) {<br />               if (m.isAnnotationPresent(AnnotationDefineForTestFunction.class)) {<br />                  try {<br />                     m.invoke(null);<br />                     passed++;<br />                  } catch (Throwable ex) {<br />                     System.out.printf("测试 %s 失败: %s %n", m, ex.getCause());<br />                     failed++;<br />                  }<br />               }<br />            }<br />            System.out.printf("测试结果： 通过: %d, 失败： %d%n", passed, failed);<br />        }<br />}<br /></pre><br /><br /><b>3。使用第三方开发的Annotation类型</b><br />这也是开发人员所常常用到的一种方式。比如我们在使用Hibernate3.0时就可以利用Annotation生成数据表映射配置文件，而不必使用Xdoclet。<br /><br /><span style="COLOR: blue">五、总结：</span><br /><br />1。前面的文字说明了annotation的使用方法、定义方式、分类。初学者可以通过以上的说明制作简单的annotation程序，但是对于一些高级的annotation应用（例如使用自定义annotation生成javabean映射xml文件）还需要进一步的研究和探讨。<br /><br />2。同时，annotation运行存在两种方式：运行时、编译时。上文中讨论的都是在运行时的annotation应用，但在编译时的annotation应用还没有涉及，因为编译时的annotation要使用annotation processing tool。<br /><br />涉及以上2方面的深入内容，作者将在后文《Java Annotation高级应用》中谈到。<br /><br /><span style="COLOR: blue">六、参考资源：</span><br />·Matrix-Java开发者社区:<a href="http://www.matrix.org.cn/" target="_new">http://www.matrix.org.cn</a><br />·<a href="http://java.sun.com/docs/books/tutorial/java/javaOO/annotations.html" target="_new">http://java.sun.com/docs/books/tutorial/java/javaOO/annotations.html</a><br />·<a href="http://java.sun.com/j2se/1.5.0/docs/guide/apt/GettingStarted.html" target="_new">http://java.sun.com/j2se/1.5.0/docs/guide/apt/GettingStarted.html</a><br />·<a href="http://www.javaworld.com/javaworld/jw-03-2005/jw-0321-toolbox.html" target="_new">http://java.sun.com/j2se/1.5.0/docs/guide/apt/GettingStarted.html</a><br />·<a href="http://java.sun.com/j2se/1.5.0/docs/guide/language/annotations.html" target="_new">http://java.sun.com/j2se/1.5.0/docs/guide/apt/GettingStarted.html</a><br />·作者的Blog:<a href="http://blog.matrix.org.cn/page/cleverpig" target="_new">http://blog.matrix.org.cn/page/cleverpig</a><br /><img src ="http://www.blogjava.net/Weibo-Forum/aggbug/40833.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Weibo-Forum/" target="_blank">微薄社区</a> 2006-04-13 11:16 <a href="http://www.blogjava.net/Weibo-Forum/archive/2006/04/13/40833.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>你也在井里吗</title><link>http://www.blogjava.net/Weibo-Forum/archive/2006/04/11/40365.html</link><dc:creator>微薄社区</dc:creator><author>微薄社区</author><pubDate>Tue, 11 Apr 2006 00:49:00 GMT</pubDate><guid>http://www.blogjava.net/Weibo-Forum/archive/2006/04/11/40365.html</guid><wfw:comment>http://www.blogjava.net/Weibo-Forum/comments/40365.html</wfw:comment><comments>http://www.blogjava.net/Weibo-Forum/archive/2006/04/11/40365.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Weibo-Forum/comments/commentRss/40365.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Weibo-Forum/services/trackbacks/40365.html</trackback:ping><description><![CDATA[
		<font color="#808080">有一天某个农夫的一头驴子，不小心掉进一口枯井里，<br />农夫绞尽脑汁想办法救出驴子，但几个小时过去了，<br />驴子还在井里痛苦地哀嚎着。<br />最后，这位农夫决定放弃，他想这头驴子年纪大了，<br />不值得大费周章去把它救出来，不过无论如何，这口井还是得填起来。 于是农夫便请来左邻右舍帮忙一起将井中的驴子埋了，以免除牠的痛苦。<br />农夫的邻居们人手一把铲子，开始将泥土铲进枯井中。<br />当这头驴子了解到自己的处境时，刚开始哭得很凄惨。<br />但出人意料的是，一会儿之后这头驴子就安静下来了。<br />农夫好奇地探头往井底一看，出现在眼前的景象令他大吃一惊：</font>
		<p>
				<strong>当铲进井里的泥土落在驴子的背部时，<br />驴子的反应令人称奇──它将泥土抖落在一旁，然后站到铲进的泥土堆上面<br />就这样，驴子将大家铲倒在它身上的泥土全数抖落在井底，然后再站上去。<br />很快地，这只驴子便得意地上升到井口，<br />然后在众人惊讶的表情中快步地跑开了！</strong>
		</p>
		<p>
				<strong>就如驴子的情况，在生命的旅程中，有时候我们难免会陷入「枯井」里，<br />会被各式各样的「泥沙」倾倒在我们身上，<br />而想要从这些「枯井」脱困的秘诀就是：将「泥沙」抖落掉，然后站到上去！<br />事实上，我们在生活中所遭遇的种种困难挫折就是加诸在我们身上的「泥沙」；<br />然而，换个角度看，它们也是一块块的垫脚石，<br />只要我们锲而不舍地将它们抖落掉，然后站上去，<br />那么即使是掉落到最深的井，我们也能安然地脱困。<br />本来看似要活埋驴子的举动，由于驴子处理厄境的态度不同，<br />实际上却帮助了它，这也是改变命运的要素之一。<br />如果我们以肯定、沉着稳重的态度面对困境，助力往往就潜藏在困境中。<br />一切都决定于我们自己，学习放下一切得失，勇往直前迈向理想。<br />我们应该不断地建立信心、希望和无条件的爱， 这些都是帮助我们从生命中的枯井脱困并找到自己的工具。</strong>
		</p>
		<p>
				<strong>请牢记以下五个快乐的小秘诀：<br />1. 不要存有憎恨的念头。<br />2. 不要让忧虑沾染你的心。<br />3. 简单地生活。<br />4. 多分享。<br />5. 少欲求。</strong>
		</p>
<img src ="http://www.blogjava.net/Weibo-Forum/aggbug/40365.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Weibo-Forum/" target="_blank">微薄社区</a> 2006-04-11 08:49 <a href="http://www.blogjava.net/Weibo-Forum/archive/2006/04/11/40365.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>管理   </title><link>http://www.blogjava.net/Weibo-Forum/archive/2006/04/11/40364.html</link><dc:creator>微薄社区</dc:creator><author>微薄社区</author><pubDate>Tue, 11 Apr 2006 00:43:00 GMT</pubDate><guid>http://www.blogjava.net/Weibo-Forum/archive/2006/04/11/40364.html</guid><wfw:comment>http://www.blogjava.net/Weibo-Forum/comments/40364.html</wfw:comment><comments>http://www.blogjava.net/Weibo-Forum/archive/2006/04/11/40364.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Weibo-Forum/comments/commentRss/40364.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Weibo-Forum/services/trackbacks/40364.html</trackback:ping><description><![CDATA[
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">这边出来两个解释名词，我尽量不讲名词，是因为我不太喜欢讲理论，但是碰到名词还是提一下。其实我们中国祖先很早早就知道这个道理，只不过西洋人把他提炼炼出来以后，一动就用了他们的专业名字。<a href="http://www.success001.cn/query.php?catid=113" target="_blank"><font face="Arial Black" size="3"><img style="CURSOR: pointer" onclick="javascript:window.open(this.src);" src="http://www.360doc.com/DownloadImg/6328/92376_1.gif" width="158" onload="javascript:if(this.width&gt;500)this.style.width=500;" align="right" vspace="20" border="0" /></font></a></span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">X和Y加起来是Z，我们是这样做的，X是集权的意思，集权的管理，这个集权，不是政治上的集权。就是说，真正的一把抓。在中国人寿可不可能有一种手下，讨厌做事情，逃避责任，不喜欢用脑筋，有的，一定有这两个人。</span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">这时候你就像牧羊犬那样带着他，底下的人都是牲口，你把他带起来好了，你不管那些猪、牛、羊、马是什么想法，反正统统都是逃避责任，不喜欢动脑筋，你就把他带起来。但是你认为中国人寿，每个人都是这样吗？ </span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">不可能，第二种就出来了，叫做Y理论，Y理论，我们叫做参与管理。一个部下成熟以后，你就应该让他参与。每天在那里动脑筋想问题。真正如果有这种手下，两个加起来等于Z。其实中国人寿并不是全部都用X来管的，也不是全部用Y来管的，因为这两种人其实统统都有。</span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">我们讲到Y，有没有人喜欢接受任务呢？怎么会没有呢？中国未来的主席假如是***，那么未来的总理是谁？不知道？假设我们***总理把我们上海市委**给找去了，我说王兄啊，我年纪大了，准备要退休了，这个位置让你来坐一坐，你看怎么样？你认为**会怎么讲？</span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">NO！NO！总理不行，我这个人只能管一个上海，管到嘉定已经很勉强了，一管到昆山我就完了，一超过昆山就一塌糊涂，我的能力仅限于上海，他会这样讲话吗？不会。他会说：谢谢总理的抬爱，你看什么时候上班啊？</span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">这就证明，人喜欢任务，没有人不喜欢任务，问题是给他的条件够不够？**先生知道，到了中央，他的权利是很大的。如果真的一点权利都没有，你看他会不会愿意去？ </span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">所以同样的市长，天津市就不行。天津市长听说凡事向***汇报，结果天津市弄得现在这个样子。结果天津现在传出一句风凉话，***这个市长，把一个直辖市管得县城一样。就是这样来的，你要去过天津就知道了，可惜这个地方。</span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">我其实三年前到北京和天津我就发现这个现象，那时我在北京碰到几个高阶层的人，其实天津和北京两个直辖市靠得这么近，干脆合并算了。人家都说天津离皇上太近，所以皇上给他一种压迫。其实真正的理由是这个理由吗？天津有条海河，我们上海也有条苏州河，天津有个海安公路，我们上海有个外滩，其实是一样的。</span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">民国初年的天津，比北京还繁荣，记得吗？那时候买泊来品还要天津去，外国领事馆都在天津。袁世凯还住过天津，傅仪都住过。所以今天闹成这个样子，说穿了就是管理人员的问题。</span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">我结果讲了讲，北京笑一笑，没想到今天传出新的消息，叫做大北京计划，果然不错，英雄所见略同，大家的想法都一样的。大北京计划出来了，涵盖天津，所以北京不好意思把天津这个名字取掉，但是现在北京开始管天津了。</span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">从明年开始，大北京计划开始了，北京的高速公路，北京的地下铁，现在开始要向天津通了，这就证明北京现在要把天津涵盖起来。不这个样子，那个天津永远变成一个县城。 </span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">那么什么叫中和，是这样做的。我们不可以凡事都讲物质，认为给人民币就可以了，其实我们还要注意精神。我们不能够一动就惩罚，其实我们还要讲激励。我不能一动就把制度搬出来吓人家，其实我们还要重视人心。这些地方非常重要，给人民币这个谁都会用，一动就研究奖金，请问精神面你是否注意到？</span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">我读过一篇文章，说中国的企业，右边这三个还做得不够，就是说不太注意人性管理吧！讲到人性，我提醒各位，人性跟人情是两个意思。噢！我圈一个就讲一个，我们光讲物质，却没有注意到精神。那么我来讲一个精神上有关的事情。什么东西是一种精神面？ </span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">在宋朝的时候有一个老妈妈，跟他的邻居说，我那个老三在一个将军的底下打仗受了伤，将军亲自跪在地下替他扎伤口，说着，她就哭起来。很感动是不是？</span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">她说不是的，我的老大原来也在他底下，一受伤，将军一跪在地上替他包扎伤口，他就报销了，打仗奋勇的杀敌，他就很快报销了。后来我那个老二又去，又受伤，也是这样包扎的，也报销了。现在完了，我那个仅存的老三，看样子也快报销了。</span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">这叫做精神面。如果你下次受了小伤，如果我们单总亲自给你包扎伤口，你很快就报销了。对不对？你含着眼泪，快报销了。你回家给你老婆说，快报销了，这个伤口是我们单总给包扎的。请问，这样子要花多少人民币？不要花多少人民币嘛，这种观念，叫做精神面，其实我们做得不太够。 </span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">第二个，惩罚谁都会啊！要记过，要调职，要冷冻还不容易？问题是你激励他吗？激励。我有两次在摩托罗拉，他们的副总带我去参观他们的厂房，一个老美，走进去的时候看到一个中国员工在那里拧汗，男的，他走到旁边说，好孩子。</span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">结果他又跟我走到后面去了，一个女的在那里做瓶管检验，他又说NICE GIRL！那个女的也笑一笑，他就跟我出去了。其实摩托罗拉那个老美，跟他底下那两个中间差9级，9层，请问他为什么这样讲？这个叫做激励。</span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">我后来发现，西洋人非常注意这一点。因为我们当主管的，每天都快太忙了，不相信我请教你们一个问题，你们每天这么忙的时候，每天花几分钟，下去看看你们干部？你每天花几分钟，在办化验室里面走一圈？你干部送上来的那报告，你有没有先称赞再修改？当人家给你一个提议，你有没有先鼓励，然后指出他的盲点？</span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<font color="#0066ff">
						<span style="FONT-WEIGHT: 700; FONT-SIZE: 11pt">我们都是激励不足，一动就训，一动就削，一动就拿命令出来唬！这个其实是缺少激励的。后来我才发现这个是要从小养成的，原来西方从小对他的子女就有激励，所以长大以后就养成这种激励的习惯！ </span>
				</font>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">人类学家达尔文，小的时候有一天是这样回去的，他爸一看就知道口袋里有什么东西啊！这边掏出来是只四脚蛇，这边掏出来是只金龟子。小心不要咬到腿了。不会的，长大以后成为人类学家。<a href="http://www.success001.cn/" target="_blank"><font color="#ffffff">成功网</font></a></span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">如果你的小宝是回来是这样子的？口袋里是什么东西啊？啊呀！啪一下，看你象个四脚蛇，赶快去读书！一天到晚玩蛇！这一打，打掉个人类学家，这就是没有激励。 </span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">去年有个女的来上海，专门研究非洲的猩猩珍古德，她在四岁的时候，有天下午不见，她妈妈到处找她。不见了，几乎都要到警察局报案了，黄昏的时候，那个家伙出现了，手上拿两个鸡蛋，一身鸡毛，头上还有点鸡屎，妈，我孵了一下午孵不出小鸡。原来躲到鸡笼里边。</span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">她妈妈一看，啊呀！我的天那！赶快洗个澡，我们吃完饭研究一下鸡蛋是怎么孵的。吃完饭以后母女两个讲了半天也讲不清楚。她妈妈又不是动物学家。</span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">第二天她妈妈亲自到学校里问老师，回来再告诉珍古德。那时候她才四岁，这种观念叫做激励。如果是你的女儿一个下午不见了，结果从鸡笼里出来了，啪嗒！一下子下去，她哭了，你笑了。这样子其实叫做没有激励。 </span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">第三个是人性。讲制度谁都会，将公司的制度搬出来谁都会，但是一旦要讲到人性，我们做得又有点欠缺。所谓人性，他的意思是这样的，从人的心里面去想、思考、观察一种行为。</span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">那么回到我们刚才那个例子，三得利啤酒厂副厂长的那个爸爸死了，那个副厂长是个上海人，他的爸爸死了，三德利啤酒厂的老总得到消息，就到他家去看他，这个不稀奇啊！鞠躬安慰两句不稀奇，稀奇的是他跟他俩个站在一起，开始对客人鞠躬。</span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">另外陆续还有很多的同事来慰问，三得利啤酒那个总经理跟中国的副总站在一起，一直鞠躬，一直谢谢，人家还以为他的爸爸死了。你猜那个副厂长跟我说了句什么话？他说，余先生我没有想到，这个总经理是这样来的，所以我这辈子大概要死在三得利了。</span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">这就叫做人性，在人性面上激化你。所以日本三得利有个习惯，部属任何家里面如果有丧事，去的时候不要光是鞠躬，要跟他们的家属站在一起，对外人打礼，表示我们是一家人。这种就叫做人性。 </span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">我以上所讲的例子，从刚才所讲的三得利，跟我所讲的摩托罗拉，跟我所讲的宋朝将军的故事，哪一个需要花钱？这些跟钱都没有关系。统统是出于人的内心，这种观念统统叫做Y，所以我们的左边是X，这两个如果综合起来，就是X+Y=Z。</span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">其实在我们中国人寿不可能统统讲X的，也不可能统统讲Y的，是看情况综合起来运用。如果我们过度地偏X，就是一种集权式的管理，但还不到过渡偏Y的时候，你就开始给他参与，也是个乱七八糟，所以我们要看看视情况而定。 </span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">一讲到视情况而定就会有另外一个概念，我们来看一看。你们已经认识的李光耀，新加坡的前总理，他现在已经变成资政了，现在国务院总理是胡作栋，李光耀其实是我们中国人的后裔，所以我拿他举例，是因为他不是一个真正的西方人，李光耀是广东梅县客家人的后裔，所以，其实他的父亲和祖父与中国人有深厚的渊源。</span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">李光耀虽然从小新加坡长大，可是他受的教育都是儒家的教育和思想。长大以后送到英国剑桥读书，同时带着东西方的的思想，我觉得这种人是最厉害的。又受过中国儒家的熏陶，又到过西方见识过西方世界，就像邓小平一样，早年在中国长大，又看过欧洲，所以对邓小平的改革开放，跟他到过欧洲肯定很有关系。</span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">李光耀管新加坡其实只有四个字，这四个字足以表达X与Y的理论，叫做开明专制。他讲得很有道理，管一个国家和一个社会，精神上面要以尽量的开明，精神可以开明，但是法律一定要专制。所以，新加坡就变成这样子了。其实他的开明就是X，他的专制就是Y，就是X和Y加起来。新加坡就变成这样子了，正好合乎这个道理。</span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">所以精神上尽量开明，在中国人寿，我们采纳不同的意见，允许不同的声音，接受不同的策略，这个叫精神止非常开明。但是中国人寿对一些重要的规定，重要的要求，重要的制度，一定要非常坚持，这叫法令，就是法令要专制。<a href="http://www.success001.cn/" target="_blank"><font color="#ffffff">成功网</font></a></span>
		</p>
		<p style="TEXT-INDENT: 30px; LINE-HEIGHT: 200%" align="left">
				<span style="FONT-SIZE: 11pt">精神要开明，其实要管新加坡就是这四个字，这本书其实出版的时候，我一夜之间就把它读完了，读到天亮，因为写得很好。这本书原文是英文的，后来翻成中文，在台湾出版，我想没有多久在大陆可以买得到翻译本。如果有一天在中国大陆出版，可以好好的读一读，管一个国家跟管一个公司是完全一样的，所以，读这个书好象在读企管一样，有道理。 </span>
		</p>
<img src ="http://www.blogjava.net/Weibo-Forum/aggbug/40364.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Weibo-Forum/" target="_blank">微薄社区</a> 2006-04-11 08:43 <a href="http://www.blogjava.net/Weibo-Forum/archive/2006/04/11/40364.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Java中操作Zip文件，压缩/解压</title><link>http://www.blogjava.net/Weibo-Forum/archive/2006/04/06/39533.html</link><dc:creator>微薄社区</dc:creator><author>微薄社区</author><pubDate>Thu, 06 Apr 2006 02:25:00 GMT</pubDate><guid>http://www.blogjava.net/Weibo-Forum/archive/2006/04/06/39533.html</guid><wfw:comment>http://www.blogjava.net/Weibo-Forum/comments/39533.html</wfw:comment><comments>http://www.blogjava.net/Weibo-Forum/archive/2006/04/06/39533.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Weibo-Forum/comments/commentRss/39533.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Weibo-Forum/services/trackbacks/39533.html</trackback:ping><description><![CDATA[
		<table style="TABLE-LAYOUT: fixed" cellspacing="0" cellpadding="0" width="100%">
				<tbody>
						<tr>
								<td>
										<font color="blue">本文版权归原作者，中国JAVA手机网收录本文的目的是让更多人阅读到此文章。转载请注明出处为中国JAVA手机网&lt;www.cnjm.net&gt;</font>
										<br />
										<div style="VISIBILITY: hidden; OVERFLOW: hidden; WIDTH: 1px; COLOR: #f4fbff; HEIGHT: 1px">来自:http://www.cnjm.net/tech/article1069.html</div>
										<br />[转载于IT狐]<br /><br />可随意转载，但请注明出处及作者<br />SonyMusic<br />2003.05.28<br />==========================================================================<br />在Java中操作Zip文件，压缩/解压<br /><br /><br />package test.nothing;<br /><br />import java.io.*;<br />import java.util.*;<br />import java.util.zip.*;<br /><br />import com.beaconsystem.util.*;<br /><br />import junit.framework.TestCase;<br /><br />/**<br />* @author SonyMusic<br />*<br />* 用于测试java.util.zip包压缩和解压缩文件zip文件的例子.<br />* 基于JUnit编写，包括两个test方法，和三个辅助方法.<br /><div style="VISIBILITY: hidden; OVERFLOW: hidden; WIDTH: 1px; COLOR: #f4fbff; HEIGHT: 1px">JAVA手机网[www.cnjm.net]</div>* 注意到使用过程中操作的全是流，所以不仅仅可以读写文件。这只是一个简单的例子.<br />*/<br />public class TestZipOp extends TestCase {<br /><br />/**<br />* Constructor for TestZipOp.<br />* @param arg0<br />*/<br />public TestZipOp(String arg0) {<br />super(arg0);<br />}<br /><br />public static void main(String[] args) {<br />junit.textui.TestRunner.run(TestZipOp.class);<br />}<br /><br />/**<br />* zip压缩功能测试.<br />* 将d:\temp\zipout目录下的所有文件连同子目录压缩到d:\temp\out.zip.<br />* @throws Exception<br />*/<br /><div style="VISIBILITY: hidden; OVERFLOW: hidden; WIDTH: 1px; COLOR: #f4fbff; HEIGHT: 1px">JAVA手机网[www.cnjm.net]</div>public void testCreateZip() throws Exception{<br />//压缩baseDir下所有文件，包括子目录<br />String baseDir="d:\temp\zipout";<br />List fileList=getSubFiles(new File(baseDir));<br /><br /><div style="VISIBILITY: hidden; OVERFLOW: hidden; WIDTH: 1px; COLOR: #f4fbff; HEIGHT: 1px">JAVA手机网[www.cnjm.net]</div>//压缩文件名<br />ZipOutputStream zos=new ZipOutputStream(new FileOutputStream("d:\temp\out.zip"));<br /><br />ZipEntry ze=null;<br />byte[] buf=new byte[1024];<br />int readLen=0;<br />for (int i = 0; i &lt;fileList.size(); i++) {<br />File f=(File)fileList.get(i);<br />System.out.print("Adding: "+f.getPath()+f.getName());<br /><br />//创建一个ZipEntry，并设置Name和其它的一些属性<br />ze=new ZipEntry(getAbsFileName(baseDir, f));<br />ze.setSize(f.length());<br />ze.setTime(f.lastModified());<br /><div style="VISIBILITY: hidden; OVERFLOW: hidden; WIDTH: 1px; COLOR: #f4fbff; HEIGHT: 1px">JAVA手机网[www.cnjm.net]</div><br />//将ZipEntry加到zos中，再写入实际的文件内容<br />zos.putNextEntry(ze);<br />InputStream is=new BufferedInputStream(new FileInputStream(f));<br />while ((readLen=is.read(buf, 0, 1024))!=-1) {<br />zos.write(buf, 0, readLen);<br />}<br />is.close();<br />System.out.println("   done...");<br />}<br />zos.close();<br />}<br /><br />/**<br />* 测试解压缩功能.<br /><div style="VISIBILITY: hidden; OVERFLOW: hidden; WIDTH: 1px; COLOR: #f4fbff; HEIGHT: 1px">JAVA手机网[www.cnjm.net]</div>* 将d:\download\test.zip文件解压到d:\temp\zipout目录下.<br />* @throws Exception<br />*/<br />public void testReadZip() throws Exception{<br /><div style="VISIBILITY: hidden; OVERFLOW: hidden; WIDTH: 1px; COLOR: #f4fbff; HEIGHT: 1px">JAVA手机网[www.cnjm.net]</div>//InputStream is=new BufferedInputStream(new FileInputStream());<br />String baseDir="d:\temp\zipout";<br />ZipFile zfile=new ZipFile("d:\download\Test.zip");<br />System.out.println(zfile.getName());<br />Enumeration zList=zfile.entries();<br />ZipEntry ze=null;<br />byte[] buf=new byte[1024];<br />while(zList.hasMoreElements()){<br />//从ZipFile中得到一个ZipEntry<br />ze=(ZipEntry)zList.nextElement();<br />if(ze.isDirectory()){<br />System.out.println("Dir: "+ze.getName()+" skipped..");<br />continue;<br />}<br />System.out.println("Extracting: "+ze.getName()+"t"+ze.getSize()+"t"+ze.getCompressedSize());<br /><br />//以ZipEntry为参数得到一个InputStream，并写到OutputStream中<br />OutputStream os=new BufferedOutputStream(new FileOutputStream(getRealFileName(baseDir, ze.getName())));<br />InputStream is=new BufferedInputStream(zfile.getInputStream(ze));<br />int readLen=0;<br />while ((readLen=is.read(buf, 0, 1024))!=-1) {<br />os.write(buf, 0, readLen);<br />}<br />is.close();<br />os.close();<br />System.out.println("Extracted: "+ze.getName());<br />}<br />zfile.close();<br /><div style="VISIBILITY: hidden; OVERFLOW: hidden; WIDTH: 1px; COLOR: #f4fbff; HEIGHT: 1px">JAVA手机网[www.cnjm.net]</div>}<br /><br />/**<br />* 给定根目录，返回一个相对路径所对应的实际文件名.<br />* @param baseDir 指定根目录<br />* @param absFileName 相对路径名，来自于ZipEntry中的name<br />* @return java.io.File 实际的文件<br />*/<br /><div style="VISIBILITY: hidden; OVERFLOW: hidden; WIDTH: 1px; COLOR: #f4fbff; HEIGHT: 1px">JAVA手机网[www.cnjm.net]</div>private File getRealFileName(String baseDir, String absFileName){<br />String[] dirs=Regex.split("/", absFileName);<br />//System.out.println(dirs.length);<br />File ret=new File(baseDir);<br />if(dirs.length&gt;1){<br />for (int i = 0; i &lt;dirs.length-1; i++) {<br />ret=new File(ret, dirs[i]);<br /><div style="VISIBILITY: hidden; OVERFLOW: hidden; WIDTH: 1px; COLOR: #f4fbff; HEIGHT: 1px">JAVA手机网[www.cnjm.net]</div>}<br />}<br />if(!ret.exists()){<br />ret.mkdirs();<br />}<br /><div style="VISIBILITY: hidden; OVERFLOW: hidden; WIDTH: 1px; COLOR: #f4fbff; HEIGHT: 1px">JAVA手机网[www.cnjm.net]</div>ret=new File(ret, dirs[dirs.length-1]);<br />return ret;<br />}<br /><br />/**<br />* 给定根目录，返回另一个文件名的相对路径，用于zip文件中的路径.<br />* @param baseDir java.lang.String 根目录<br />* @param realFileName java.io.File 实际的文件名<br />* @return 相对文件名<br />*/<br />private String getAbsFileName(String baseDir, File realFileName){<br />File real=realFileName;<br />File base=new File(baseDir);<br />String ret=real.getName();<br />while (true) {<br />real=real.getParentFile();<br />if(real==null) break;<br />if(real.equals(base)) break;<br />else{<br />ret=real.getName()+"/"+ret;<br />}<br />}<br />return ret;<br />}<br /><div style="VISIBILITY: hidden; OVERFLOW: hidden; WIDTH: 1px; COLOR: #f4fbff; HEIGHT: 1px">JAVA手机网[www.cnjm.net]</div><br />/**<br />* 取得指定目录下的所有文件列表，包括子目录.<br />* @param baseDir File 指定的目录<br />* @return 包含java.io.File的List<br />*/<br />private List getSubFiles(File baseDir){<br /><div style="VISIBILITY: hidden; OVERFLOW: hidden; WIDTH: 1px; COLOR: #f4fbff; HEIGHT: 1px">JAVA手机网[www.cnjm.net]</div>List ret=new ArrayList();<br />//File base=new File(baseDir);<br />File[] tmp=baseDir.listFiles();<br />for (int i = 0; i &lt;tmp.length; i++) {<br /><div style="VISIBILITY: hidden; OVERFLOW: hidden; WIDTH: 1px; COLOR: #f4fbff; HEIGHT: 1px">JAVA手机网[www.cnjm.net]</div>if(tmp[i].isFile()){<br /><div style="VISIBILITY: hidden; OVERFLOW: hidden; WIDTH: 1px; COLOR: #f4fbff; HEIGHT: 1px">JAVA手机网[www.cnjm.net]</div>ret.add(tmp[i]);<br />}<br /><div style="VISIBILITY: hidden; OVERFLOW: hidden; WIDTH: 1px; COLOR: #f4fbff; HEIGHT: 1px">JAVA手机网[www.cnjm.net]</div>if(tmp[i].isDirectory()){<br />ret.addAll(getSubFiles(tmp[i]));<br />}<br />}<br />return ret;<br />}<br /><br />}<br /></td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/Weibo-Forum/aggbug/39533.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Weibo-Forum/" target="_blank">微薄社区</a> 2006-04-06 10:25 <a href="http://www.blogjava.net/Weibo-Forum/archive/2006/04/06/39533.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>项目沟通——小故事中的大道理</title><link>http://www.blogjava.net/Weibo-Forum/archive/2006/03/27/37540.html</link><dc:creator>微薄社区</dc:creator><author>微薄社区</author><pubDate>Mon, 27 Mar 2006 01:44:00 GMT</pubDate><guid>http://www.blogjava.net/Weibo-Forum/archive/2006/03/27/37540.html</guid><wfw:comment>http://www.blogjava.net/Weibo-Forum/comments/37540.html</wfw:comment><comments>http://www.blogjava.net/Weibo-Forum/archive/2006/03/27/37540.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Weibo-Forum/comments/commentRss/37540.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Weibo-Forum/services/trackbacks/37540.html</trackback:ping><description><![CDATA[
		<font color="#ff0000">一、 沟通与效率<br /><br /></font>项目中有很多工作需要充分沟通。确立目标，达成共识需要沟通；明确职责，分工协作需要沟通；工作汇报，意见交流还离不开沟通。沟通障碍往往会造成项目多次返工，事倍功半，严重时会酿成不可挽回的损失，导致项目失败。下面的故事能说明这个道理：<br /><font color="#006600"><br />一位教授精心准备一个重要会议上的演讲，会议的规格之高、规模之大都是他平生第一次遇到的。全家都为教授的这一次露脸而激动，为此，老婆专门为他选购了一身西装。晚饭时，老婆问西装合身不，教授说上身很好，裤腿长了那么两公分，倒是能穿，影响不大。<br />晚上教授早早就睡了。老妈却睡不着，琢磨着儿子这么隆重的演讲，西裤长了怎么能行，反正人老了也没瞌睡，就翻身下床，把西装的裤腿剪掉两公分，缝好烫平，然后安心的入睡了。早上五点半，老婆睡醒了,因为家有大事，所以起来比往常早些，想起老公西裤的事，心想时间还来得及，便拿来西裤又剪掉两公分，缝好烫平，惬意的去做早餐了。一会，女儿也早早起床了，看妈妈的早餐还没有做好，就想起爸爸西裤的事情，寻思自己也能为爸爸做点事情了，便拿来西裤，再剪短两公分，缝好烫平 ……<br />这个裤子还能不能穿？ </font><br /><br />这个故事我讲课时经常讲，听者没有不捧腹的，可分析了背后的道理就再也没人笑得起来了。故事中的主人公们因为沟通不到位，付出了三倍的劳动得到的结果却是废了一条裤子。究其原因，首先教授没有明确目标和分工——裤子要不要剪短，由谁来剪断，其次老妈、老婆、女儿在行动之前没有征询家庭（项目组）其他成员的意见。所以造成吃力不讨好的结局，所以我经常讲：沟而不通，费时误工。这种情况在我们的项目中非常多见，由于缺乏沟通，两个小组同时对一个版本进行升级，结果两个版本合不在一起；由于缺乏沟通，项目组的行动和客户的需求发生偏差，造成大量的返工和浪费；由于缺乏沟通，冲突不断出现，造成客户和项目组矛盾重重，项目组内部凝聚力下降，甚至关键人物拂袖离去。我见过不少工程师总希望通过默不作声的多干活来弥补自己的拙于沟通的缺陷，孰不知，项目中用钻研技术和勉力蛮干的方式需要沟通协调的问题犹如南辕北辙。<br /><br /><font color="#ff0000">二、沟通与成本</font><br /><br />沟通的重要性是毋庸置疑的，但项目经理在强化沟通的同时不能忽视沟通的成本。沟通方式的选择，沟通时机的把握，沟通范围的界定都会影响沟通的成本，进而会影响整个项目的成本和进度。譬如开会，有人总结出一个会议的成本＝（与会人工资＋日常开支＋找不到你的人的工资）×人数×会议时间＋会议本身支出。大家可以据此计算一下一个无效会议浪费的成本。<br /><br />所以，要尽量采取节省成本的方式达到沟通的目的，能网络会议、电话会议的就不宜集中开会；能邮件、电话达到目的的，不必面谈；能用规章制度标准化的事情，没必要个案沟通。下面的故事也许会给您一些启发：<br /><br /><font color="#006600">上世纪八十年代，有一对两地分居的夫妇，丈夫留学美国，妻子在国内上班。当时的电话资费非常贵，每分钟要二三十元钱，这对夫妇沟通的成本很高。后来他们想了一个既省钱又能保证每天都能沟通的办法。他们约定：当电话铃响一声就挂断的话，含义是：我很好，不要挂念；当电话铃响两声挂断的话，含义是：你的回信我收到了，请放心；当电话铃响三声挂断，含义是:我的信件寄出，注意查收；铃响三声以后还不挂断，代表我确实有话要说，请接电话。</font><br /><br />故事中的夫妇巧妙利用打电话的约定，将他们的沟通模式化，标准化，于是大大节省了例行沟通的成本，只有例外情况才付费用。当然，随着科技的发展，解决这个问题的途经很多，成本也很低，但故事中想方设法降低沟通成本的思想值得借鉴。<br /><br /><font color="#ff0000">三、 沟通与专业技术</font><br /><br />项目经理未必是样样都很专业的专才，但至少应该是样样都熟悉的通才，否则，很难将一个复杂的大型项目管好。对项目中某一专业领域一点也不懂的项目经理，就很难与项目组中该领域的成员沟通，难以监督和检查他们工作的效率和质量——因为有效沟通的前提是彼此能够正确解析对方的信号。项目经理必须懂得一些领域的专业语言（术语），才能和项目组中的专业成员有效交流。<br /><br />有这么一个笑话：<br /><font color="#006600"><br />一家饭店刚招来一个服务员，第一天上班，饭店来了一拨食客。服务员招呼他们落座后，为首的客人道：“服务员，茶！”<br />服务员开始数人：“1,2,3,4,5,6,7,8,9,10。”然后回答：“十个。”说完侍立一旁。<br />等了一会，客人见茶还不上来，又喊：“服务员，倒茶！”<br />服务员倒着数了一遍人数：“10,9,8,6,5,4,3,2,1。”答道：“还是十个！”<br />客人感觉很纳闷，问：“我让你倒茶，你数啥？”<br />服务员以为客人问她的属相，便脱口而出：“我属（数）猪！”</font><font color="#990066"><br /></font><br />这个服务员先把“茶”听成“查”，“倒茶”理解为倒着查，又把数数的“数”理解为属相的“属”，让客人啼笑皆非。因为她不还没有适应新的语言环境，不能正确解析客人的话。不懂专业的项目经理跟专业技术人员交流，就有点像那位服务员对客人。一些高水平的技术人才即因为长期得不到项目经理的理解而郁闷地离去。<img src ="http://www.blogjava.net/Weibo-Forum/aggbug/37540.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Weibo-Forum/" target="_blank">微薄社区</a> 2006-03-27 09:44 <a href="http://www.blogjava.net/Weibo-Forum/archive/2006/03/27/37540.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>而立之年的十个人生目标</title><link>http://www.blogjava.net/Weibo-Forum/archive/2006/03/27/37533.html</link><dc:creator>微薄社区</dc:creator><author>微薄社区</author><pubDate>Mon, 27 Mar 2006 00:49:00 GMT</pubDate><guid>http://www.blogjava.net/Weibo-Forum/archive/2006/03/27/37533.html</guid><wfw:comment>http://www.blogjava.net/Weibo-Forum/comments/37533.html</wfw:comment><comments>http://www.blogjava.net/Weibo-Forum/archive/2006/03/27/37533.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Weibo-Forum/comments/commentRss/37533.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Weibo-Forum/services/trackbacks/37533.html</trackback:ping><description><![CDATA[
		<table>
				<tbody>
						<tr>
								<td>第一，最重要的就是定好自己的职业生涯规划。 <br /><br />给自己一个清晰、科学和客观的职业定位，评估一下自己的职业气质、职业兴趣、职业倾向、职业能力和职业潜力等，然后以此为目标，使未来的职业处于稳步向前发展的状态。 <br /><br />第二，人际关系网基本成型。 <br /><br />这个人际关系网包括老师、朋友、亲人、同学、同事和所有可以互相帮助的人。人际关系网表现了一个人情商的高低，不是一朝一夕就能建立起来的，它需要以心胸开阔，气量豁达、与人为善、乐于助人的气质，摩肩接踵的结交很多朋友。 <br /><br />第三，较高的学历、渊博的知识和丰富的实践经验。 <br /><br />而立之年应该有了一个自己的知识库，并像存储器那样有层次地分成若干个存储单元，分门别类的存储于自己的大脑中，这样才会有职场竞争力。文化素养是最基本的知识要求，要学会本行业所需要的一切知识并有所发展。 <br /><br />第四，养成个人风格。 <br /><br />在30岁以前，找出你所喜欢的榜样，经常以他们为榜样，学习他们的理念、思维，不断模仿、不断尝试、不断改变，养成一种风格、风度，就会得到事半功倍的效果。 <br /><br />第五，注意品质，以优良的品德做人。 <br /><br />那就是：诚信建立信誉，谦虚使人精进；夯实职业金字塔，走健康职业路。如果你到了30岁仍未能建立起坚如磐石的忠诚信誉，这一缺点将会困扰你一生。 <br /><br />第六，善于整理和集中自己的优势、长处。 <br /><br />不管你目前担任什么样的角色，知道自己的长处对成功都很重要。一定要投入你所喜爱、发挥强项，做自己最擅长的事情，并扬长避短从事好自己的职业。 <br />第七，在感情生活方面平和安定。 <br /><br />在攀登事业的高峰时，家庭是自己坚强的后盾，你需要一个理解和支持你的爱人和家庭。 <br /><br />第八，突破困境，从失败中积攒成功的资本。 <br /><br />人生总要面临各种困境的挑战，使自己永远保持健康的心态、进取的信念。切忌让情绪伤害自己，心态消极的人，无论如何都挑不起生活的重担。 <br /><br />第九，储备准备创业、另谋生路的存款。 <br /><br />在这个多变的职业世界里，你也许不会永远在一个地方工作，或者永远在一个位置上淋漓尽致地发挥自己，如果你事先储蓄了足够的钱，你便有了一个安全的后盾。 <br /><br />第十，学会在任何时候三缄其口，说话慎重。 </td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/Weibo-Forum/aggbug/37533.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Weibo-Forum/" target="_blank">微薄社区</a> 2006-03-27 08:49 <a href="http://www.blogjava.net/Weibo-Forum/archive/2006/03/27/37533.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>面向对象的三个基本特征</title><link>http://www.blogjava.net/Weibo-Forum/archive/2006/03/24/37227.html</link><dc:creator>微薄社区</dc:creator><author>微薄社区</author><pubDate>Fri, 24 Mar 2006 07:28:00 GMT</pubDate><guid>http://www.blogjava.net/Weibo-Forum/archive/2006/03/24/37227.html</guid><wfw:comment>http://www.blogjava.net/Weibo-Forum/comments/37227.html</wfw:comment><comments>http://www.blogjava.net/Weibo-Forum/archive/2006/03/24/37227.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Weibo-Forum/comments/commentRss/37227.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Weibo-Forum/services/trackbacks/37227.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 面向对象的三个基本特征是：封装、继承、多态。																																																																																																																																														...&nbsp;&nbsp;<a href='http://www.blogjava.net/Weibo-Forum/archive/2006/03/24/37227.html'>阅读全文</a><img src ="http://www.blogjava.net/Weibo-Forum/aggbug/37227.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Weibo-Forum/" target="_blank">微薄社区</a> 2006-03-24 15:28 <a href="http://www.blogjava.net/Weibo-Forum/archive/2006/03/24/37227.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 23种模式一点就通</title><link>http://www.blogjava.net/Weibo-Forum/archive/2006/03/22/36873.html</link><dc:creator>微薄社区</dc:creator><author>微薄社区</author><pubDate>Wed, 22 Mar 2006 08:01:00 GMT</pubDate><guid>http://www.blogjava.net/Weibo-Forum/archive/2006/03/22/36873.html</guid><wfw:comment>http://www.blogjava.net/Weibo-Forum/comments/36873.html</wfw:comment><comments>http://www.blogjava.net/Weibo-Forum/archive/2006/03/22/36873.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Weibo-Forum/comments/commentRss/36873.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Weibo-Forum/services/trackbacks/36873.html</trackback:ping><description><![CDATA[一、创建型模式 <br /><br />　　FACTORY？人才市场：以往是要哪个人才，就找哪个人才，效率低，现在有了人才市场，我们只需直接去人才市场挑一个好了； <br /><br />　　BUILDER？生产流水线：以前是手工业作坊式的人工单个单个的生产零件然后一步一步组装做，好比有了工业革命，现在都由生产流水线代替了。如要造丰田汽车，先制定汽车的构造如由车胎、方向盘、发动机组成。再以此构造标准生产丰田汽车的车胎、方向盘、发动机。然后进行组装。最后得到丰田汽车； <br /><br />　　PROTOTYPE？印刷术的发明：以前只能临贴才能保持和别人的字迹基本相同，直从印刷技术发明，从而保证了复制得和原物一模一样； <br /><br />　　SINGLETON？唯一：以前是商标满天飞，相同的商标难免造成侵权，直从有商标保护法后，就保证了不会再产生第家企业使用相同的商标； <br /><br /><br />　　二、结构型模式 <br /><br />　　ADAPTER？集众人之私，成一己之公：武当派张三丰会太极拳，少林派智空大师会金刚般若掌，如果他们两个都成为我的师傅，我就既会太极拳，又会金刚般若掌了； <br /><br />　　DECORATOR？青出于蓝而胜于蓝：武当派张三丰会太极拳，是我师傅，他教会了我太极拳，但我自己还会点蒙古式摔交，张三丰却不会。于是我就成了DECORATOR模式的实现； <br /><br />　　BRIDGE？白马非马：马之颜色有黑白，马之性别有公母。我们说"这是马"太抽象，说"这是黑色的公马"又太死板，只有将颜色与性别和马动态组合，"这是（黑色的或白色的）（公或母）马"才显得灵活而飘逸，如此bridge模式精髓得矣。 <br /><br />　　COMPOSITE？大家族：子又生孙，孙又生子，子子孙孙，无穷尽也，将众多纷杂的人口组织成一个按辈分排列的大家族即是此模式的实现； <br /><br />　　FACADE？求同存异：高中毕业需读初中和高中，博士也需读初中和高中，因此国家将初中和高中普及成九年制义务教育； <br /><br />　　FLYWEIGHT？一劳永逸：认识三千汉字，可以应付日常读书与写字，可见头脑中存在这个汉字库的重要； <br /><br />　　PROXY？垂帘听政：犹如清朝康熙年间的四大府臣，很多权利不在皇帝手里，必须通过辅佐大臣去办； <br /><br />　　三、行为模式 <br /><br />　　CHAIN OF RESPONSIBLEITY？租房：以前为了找房到处打听，效率低且找不到好的房源。现在有了房屋中介，于是向房屋中介提出租房请求，中介提供一个合适的房源，满意则不再请求，不满意继续看房，直到满意为止； <br /><br />　　COMMAND？借刀杀人：以前是想杀谁就杀，但一段时间后领悟到，长此以往必将结仇太多，于是假手他人，挑拨他人之间的关系从而达到自己的目的； <br /><br />　　INTERPRETER？文言文注释：一段文言文，将它翻译成白话文； <br /><br />　　ITERATOR？赶尽杀绝：一个一个的搜索，绝不放掉一个； <br /><br />　　MEDIATOR？三角债：本来千头万绪的债务关系，忽出来一中介，包揽其一切，于是三角关系变成了独立的三方找第四方中介的关系； <br /><br />　　MEMENTO？有福同享：我有多少，你就有多少； <br /><br />　　OBSERVER？看守者：一旦被看守者有什么异常情况，定会及时做出反应； <br /><br />　　STATE？进出自由：如一扇门，能进能出，如果有很多人随时进进出出必定显得杂乱而安全，如今设一保安限制其进出，如此各人进出才显得规范； <br /><br />　　STRATEGY？久病成良医：如人生病可以有各种症状，但经过长期摸索，就可以总结出感冒、肺病、肝炎等几种； <br /><br />　　TEMPLATE METHOD？理论不一定要实践：教练的学生会游泳就行了，至于教练会不会则无关紧要； <br /><br />　　VISITOR？依法治罪：因张三杀人要被处死，李四偷窃要被罚款。由此势必制定处罚制度，故制定法律写明杀人、放火、偷窃等罪要受什么处罚，经通过后须变动要小。今后有人犯罪不管是谁，按共条例处罚即是，这就是访问者模式诞生的全过程。<img src ="http://www.blogjava.net/Weibo-Forum/aggbug/36873.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Weibo-Forum/" target="_blank">微薄社区</a> 2006-03-22 16:01 <a href="http://www.blogjava.net/Weibo-Forum/archive/2006/03/22/36873.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>流媒体技术及其DSP解决方案</title><link>http://www.blogjava.net/Weibo-Forum/archive/2006/03/22/36860.html</link><dc:creator>微薄社区</dc:creator><author>微薄社区</author><pubDate>Wed, 22 Mar 2006 07:13:00 GMT</pubDate><guid>http://www.blogjava.net/Weibo-Forum/archive/2006/03/22/36860.html</guid><wfw:comment>http://www.blogjava.net/Weibo-Forum/comments/36860.html</wfw:comment><comments>http://www.blogjava.net/Weibo-Forum/archive/2006/03/22/36860.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Weibo-Forum/comments/commentRss/36860.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Weibo-Forum/services/trackbacks/36860.html</trackback:ping><description><![CDATA[当前的高速宽带网络连接继续呈现出蔓延之势，宽带接入不仅满足企事业、工商业、商务和教育等的需要，而且正在不断深入到社区、进入住户。人们比以往任何时候都更容易地得到更加丰富的媒体内容，这些内容是通过大量分布广泛的宽带设备以提供共享的资源。正是建立在如此广阔的宽带基础之上，催生出了"流媒体(Streaming Media)"的应用。流媒体其实代表着由传统的内容下载形式向新型内容跨媒体实时获取的演变，流媒体的应用就是要使用户在第一时间去体验一种无缝和即时的媒体资料信息，而流媒体技术的实现方法在很大程度上得益于高速可编程处理器及其方案。本文将将首先概述流媒体技术，并介绍与之相关的标准、平台和解决方案，并期对流媒体应用有所展望。 
<p>    <b>流媒体技术概述</b></p><p>    在探讨流媒体之前，我们不妨简要地回顾一下数字信息时代的数字化进程。众所周知，语音的数字化造就了数字程控交换机和蜂窝移动数字电话技术的发展；音频和视频的数字化又造就了计算机多媒体技术的发展；多种音视频流技术的演变又使得传统消费类音视频产品的数字化。而承载这种变化的便是语音流、音频流、视频流这样的媒体流，处理这些媒体流就需要高性能数字媒体技术。 
</p><p>    高性能的数字媒体技术覆盖的是一个广阔的流媒体和基于媒体的新兴技术，这便囊括了集成视频、语音、数据内容到许多新的和特色化的应用，并且重新构造数字媒体内容提供的方式。数字媒体所面临的挑战包含实时的性能，更高的信道密度和软件编程的灵活性，以适应同时出现的视频、语音、数据流的传输的需要。典型的数字媒体处理视功能包括编码、解码媒体流，不同格式的码转换，不同速率的流转换，以适应变化的系统级需求。另外还包括压缩、解压，加密、分组化和媒体流的传输等处理功能。 
</p><p>    流媒体其实是个技术名词，简单来说就是采用流技术，即把连续的影象和声音信息经过压缩处理，在网络上实施多媒体文件的实时传输和播放。由于宽带已成为网络架构的重点，流媒体的特点是如何运用可变带宽技术，使人们可以在灵活的带宽环境下在线欣赏高品质音频和视频节目，及至进行实时可视通信。既然流媒体可以适应各种不同网络带宽，在窄带下也同样可以流畅的观看、收听，当然，质量会因带宽的限制而略有影响。 
</p><p>    流媒体实现的关键技术是用流式传输，把声音、影像或动画等信息由音视频服务器向用户终端连续地实时传送。这种流式传输系统的多媒体文件经特定压缩方式被解析成压缩包，由视频服务器向用户终端顺序或实时传送，用户只需经过几秒的启动延时便可进行观看。在音频和视频等媒体文件在播放时，文件剩余部分将在后台从服务器内继续下载。 
</p><p>    流媒体技术包含着跨媒体融合的实用技术，其中必然涉及许多视频和音频标准的应用，其中不少标准尚需不断完善。这些标准的实现可以采用硬件或软件技术处理。对于成熟的标准，可以采用专用硬件，而对于不够成熟的标准，或是未确定国际化的标准，采用软件算法实现将更为可行，其最理想的处理平台就是高速数字信号处理器（DSP）。由于媒体流产品可进行本地解码，因此实际上消费者看不到其内容格式，而媒体流设备的固有功能性却能够得到进一步增强。如果在设计的中心位置具有一个可编程内核，原始设备制造商 (OEM) 就可通过简单的软件下载即可升级到新的或修订后的标准。DSP便可提供这样一个将所有这些功能结合起来的核心，OEM 厂商的流媒体产品设计因此而具有不断完善的灵活性以适应不断变化的技术要求。 
</p><p>    <b>流媒体相关技术标准</b></p><p>    在流媒体技术中传输的多媒体数据需要预先进行特殊的压缩处理，那么针对不同的应用可以分为面向视频流、面向影像流、面向音频流和面向语音流四类，将对应不同的处理技术方法，于是就有一系列标准和规范。 
</p><p>    在视频流中包括侧重于交互应用的H.263，还有侧重于监控应用M-JPEG。至于 MPEG1和MPEG2已在激光影碟中广泛应用。MPEG4技术的应用将使当前很多提供声音和数据服务的系统得到进一步的扩展，其所具备的高压缩率和很强的编码容错功能必将使它在互联网和当前蜂窝通信网络的视频领域得到广泛应用。 
</p><p>    H.264是ITU在MPEG4基础上开发出来的新的视频编码算法，具有更高的编码效率、更强的解码差错恢复能力、以及提高了对移动通信和IP网络的适应性。H.264有可能作为MPEG-4的后继技术而成为一种适用于各类系统的公共技术，因此业界对它在下一代视频通信领域的应用前景普遍寄予厚望。中国在广阔的国内多媒体通信市场上占据主动，也在开发拥自主知识产权的AVS标准并已有重大进展。 
</p><p>    视频流在网络上实现播放时，媒体播放器需要识别媒体文件格式，并从中得到回放所需信息。因特网上使用较多的流式视频格式有RealNetworks公司所制定的音频视频压缩规范称为RealMedia，是一个跨平台的客户/服务器结构的多媒体应用标准。Apple计算机公司的QuickTime是数字媒体领域事实上的工业标准，可以通过网络提供实时的数字化信息流、工作流与文化回放功能。微软公司也正用将其专有的Windows Media技术应用于编解码市场。DivX在该领域也颇具影响力。 
</p><p>    除视频流之外，面向影像流的标准包括JPEG、GIFF、TIFF、位图等；面向音频的标准有AAC、 ATRAC3、 MP3、 WMA等；而面向语音的标准有AMR, G.723.1, G.726, G.711，G.722，G.728，G.729等。 
</p><p>    流媒体采用流式传输方式在网络服务器与客户端之间进行传输，流式传输的实现需要合适的传输协议。IETF（Internet Engineering Task Force，因特网工程任务组）制订的很多协议可用于实现流媒体技术。 
</p><p>    <b>流媒体实用解决方案</b></p><p>    DSP以其高性能和软件可编程等特点，长期历来对数字媒体处理起到了积极的推动作用。TI在DSP媒体处理技术上积累丰富的经验，其解决方案的应用范围极为广泛，可以涵盖高性能视频到低成本音频与影像。随着DSP在实现SOC技术上的巨大进展，TI陆续推出一批基于DSP，适用于流媒体的的通用媒体处理器，并且全面支持各种的流媒体格式，以针对不用的产品应用方向。 
</p><p>    TMS320DA180是针对音频流的平台处理，是集成DSP和RISC处理器的双核结构，并具有包括以太网接口在内的多种外围接口，易于扩展WLAN。可以支持许多种音频和语音解码，适合于远程音频播放器和网络广播等产品。 
</p><p>    TMS320DM270是针对影像和视频流平台，不仅集成有DSP和RISC处理器的双核结构，为增强影像和视频处理能力，又集成有专用图像处理引擎iMX。该器件中还集成了CCD控制区、OSD视频编码器、影像预览等单元。DM270支持MPEG4在VGA分辨率下的实时解码，以及在CIF分辨率的实时编解码，适用产品为数字媒体播放器和视频电话、网络相机等。 
</p><p>    TMS320DM642 数字媒体处理器作为高端视频流平台，将在更多的视频和影像解决方案中扮演着重要的作用。基于经业届验证的C64x DSP核心，DM642是业界当今最高性能的多媒体引擎，具有方便地升级任何最新编解码软件的能力。DM642具有支持VGA分辨率下的单路MPEG2编码或四路MPEG2解码的能力。其有高质量、多通道、优越的视频性能，以及完整的软件可编程性，可加快视频产品的上市时间，通过集成音频可视性外设降低系统成本。DM642极其兼容优化器件DM641和DM640适用于VOD和IP机顶盒、数字媒体中心、数字监控系统等应用。 
</p><p>    为便于推广DSP的流媒体解决方案，TI已推出数字媒体开发套件，并在基于其DSP的平台上展示了对H.264基本和主类协议的编解码能力。TI一直与H.264软件算法开发商，如UBVideo和Ingenient技术公司合作。该综合开发套件不仅可以使视频工程师更加熟悉DSP，而且可以使DSP工程师更容易开发视频系统。 
</p><p>    众多知名的视频算法提供商如Emuzed、Escient、FedTec、iM Networks、Ingenient、Mediabolic 及 Oregon Networks等，已基于TI的媒体平台开发出商用流媒体方案。业界知名的嵌入式操作系统公司Accelerated Technologies、Pigeon Point Systems 及 WindRiver已经能够支持TI的流媒体解决方案，而 DivX、Microsoft、Quicktime 以及 RealNetworks 等多家公司的媒体编码译码器已移植到 TI 的媒体流产品中。 
</p><p>    以媒体处理平台支持流媒体技术, 并综合多种相关技术，以推广低成本、高性能的解决方案，是流媒体产品产业化的关键。期待着更多的媒体内容不仅由PC,而且由多种新型独具特色的视频媒体终端，通过流媒体技术传送到千家万户。 
</p><p>    <b>流媒体的发展空间</b></p><p>    宽带入户的不断发展已使家庭网络技术成本已逐步达到消费者的心理价位。今天，有数以百万计的计算机用于存储音乐文件和来自数字相机的影像。个人视频收录机（PVR）和个人音频收录机（PAR）正在成为新的市场热点，并加速了流媒体技术的产业化进程。更多的设备需要使得消费者在数字家庭内外对多种媒体格式进行管理、储存、显示以及分配，便使得流媒体的解决方案拓展到数字电视、数字媒体中心、数字机顶盒、小区媒体网关，以及便携式手持终端等广阔的市场空间。 
</p><p>    Forrester Research公司调查表明，将数字家庭转变成大众市场的先决条件正逐渐形成：客户正在升级其外设；服务供应商提供的服务项目不仅仅限于访问；而家庭网络设备也正开始与所有设备进行无缝连接。Yankee Group公司提供的数据表明，美国近1,700万个家庭拥有宽带连接，其中有400万个家庭可经常下载完整的视频内容。流媒体技术由此而得到了发展的机遇。 
</p><p>    在中国，作为影响最广、增长最快、市场潜力最大的产业之一的互联网，正在以超出人们想象的深度和广度迅速的发展。根据CNNIC的报告，截止2003年底，中国网民数达到了7950万，居世界第二位；上网计算机达到3089万台，网络国际出口带宽总数达到27216M。数字家庭消费者的愿望主要集中于对现有或新的丰富的多媒体内容进行更好的管理。这种愿望为服务供应商、消费类电子与网络设备制造商提供了重大的商机，以便他们推出使用户可轻松访问内容的产品。因此，流媒体在中国的推广势在必行。 <br /></p><img src ="http://www.blogjava.net/Weibo-Forum/aggbug/36860.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Weibo-Forum/" target="_blank">微薄社区</a> 2006-03-22 15:13 <a href="http://www.blogjava.net/Weibo-Forum/archive/2006/03/22/36860.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何把Hibernate2.1升级到Hibernate3.0</title><link>http://www.blogjava.net/Weibo-Forum/archive/2006/03/21/36585.html</link><dc:creator>微薄社区</dc:creator><author>微薄社区</author><pubDate>Tue, 21 Mar 2006 03:19:00 GMT</pubDate><guid>http://www.blogjava.net/Weibo-Forum/archive/2006/03/21/36585.html</guid><wfw:comment>http://www.blogjava.net/Weibo-Forum/comments/36585.html</wfw:comment><comments>http://www.blogjava.net/Weibo-Forum/archive/2006/03/21/36585.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Weibo-Forum/comments/commentRss/36585.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Weibo-Forum/services/trackbacks/36585.html</trackback:ping><description><![CDATA[选自&lt;&lt;精通Hibernate：Java对象持久化技术详解&gt;&gt; 作者：孙卫琴 来源:www.javathinker.org<br /> 
<p>1.1 Hibernate API 变化 <br />1.1.1 包名 <br />1.1.2 org.hibernate.classic包 <br />1.1.3 Hibernate所依赖的第三方软件包 <br />1.1.4 异常模型 <br />1.1.5 Session接口 <br />1.1.6 createSQLQuery() <br />1.1.7 Lifecycle 和 Validatable 接口 <br />1.1.8 Interceptor接口 <br />1.1.9 UserType和CompositeUserType接口 <br />1.1.10 FetchMode类 <br />1.1.11 PersistentEnum类 <br />1.1.12 对Blob 和Clob的支持 <br />1.1.13 Hibernate中供扩展的API的变化 <br />1.2 元数据的变化 <br />1.2.1 检索策略 <br />1.2.2 对象标识符的映射 <br />1.2.3 集合映射 <br />1.2.4 DTD <br />1.3 查询语句的变化 <br />1.3.1 indices()和elements()函数 </p><p><br />尽管Hibernate 3.0 与Hibernate2.1的源代码是不兼容的，但是当Hibernate开发小组在设计Hibernate3.0时，为简化升级Hibernate版本作了周到的考虑。对于现有的基于Hibernate2.1的Java项目，可以很方便的把它升级到Hibernate3.0。</p><p>本文描述了Hibernate3.0版本的新变化，Hibernate3.0版本的变化包括三个方面：<br />（1）API的变化，它将影响到Java程序代码。<br />（2）元数据，它将影响到对象-关系映射文件。<br />（3）HQL查询语句。</p><p>值得注意的是， Hibernate3.0并不会完全取代Hibernate2.1。在同一个应用程序中，允许Hibernate3.0和Hibernate2.1并存。</p><p>1.1 Hibernate API 变化</p><p>1.1.1 包名</p><p>Hibernate3.0的包的根路径为: “org.hibernate” ，而在Hibernate2.1中为“net.sf.hibernate”。这一命名变化使得Hibernate2.1和Hibernate3.0能够同时在同一个应用程序中运行。</p><p>如果希望把已有的应用升级到Hibernate3.0，那么升级的第一步是把Java源程序中的所有“net.sf.hibernate”替换为“org.hibernate”。</p><p>Hibernate2.1中的“net.sf.hibernate.expression”包被改名为“org.hibernate.criterion”。假如应用程序使用了Criteria API，那么在升级的过程中，必须把Java源程序中的所有“net.sf.hibernate.expression”替换为“org.hibernate.criterion”。</p><p>如果应用使用了除Hibernate以外的其他外部软件，而这个外部软件又引用了Hibernate的接口，那么在升级时必须十分小心。例如EHCache拥有自己的CacheProvider： net.sf.ehcache.hibernate.Provider，在这个类中引用了Hibernate2.1中的接口，在升级应用时，可以采用以下办法之一来升级EHCache:</p><p>（1）手工修改net.sf.ehcache.hibernate.Provider类，使它引用Hibernate3.0中的接口。<br />（2）等到EHCache软件本身升级为使用Hibernate3.0后，使用新的EHCache软件。<br />（3）使用Hibernate3.0中内置的CacheProvider：org.hibernate.cache.EhCacheProvider。</p><p>1.1.2 org.hibernate.classic包</p><p>Hibernate3.0把一些被废弃的接口都转移到org.hibernate.classic中。</p><p>1.1.3 Hibernate所依赖的第三方软件包</p><p>在Hibernate3.0的软件包的lib目录下的README.txt文件中，描述了Hibernate3.0所依赖的第三方软件包的变化。</p><p>1.1.4 异常模型</p><p>在Hibernate3.0中，HibernateException异常以及它的所有子类都继承了java.lang.RuntimeException。因此在编译时，编译器不会再检查HibernateException。</p><p>1.1.5 Session接口</p><p>在Hibernate3.0中，原来Hibernate2.1的Session接口中的有些基本方法也被废弃，但为了简化升级，这些方法依然是可用的，可以通过org.hibernate.classic.Session子接口来访问它们，例如：</p><p><br />org.hibernate.classic.Session session=sessionFactory.openSession();<br />session.delete("delete from Customer ");</p><p><br />在Hibernate3.0中，org.hibernate.classic.Session接口继承了org.hibernate.Session接口，在org.hibernate.classic.Session接口中包含了一系列被废弃的方法，如find()、interate()等。SessionFactory接口的openSession()方法返回org.hibernate.classic.Session类型的实例。如果希望在程序中完全使用Hibernate3.0，可以采用以下方式创建Session实例：</p><p>org.hibernate.Session session=sessionFactory.openSession();</p><p>如果是对已有的程序进行简单的升级，并且希望仍然调用Hibernate2.1中Session的一些接口，可以采用以下方式创建Session实例：</p><p>org.hibernate.classic.Session session=sessionFactory.openSession();</p><p>在Hibernate3.0中，Session接口中被废弃的方法包括：<br />* 执行查询的方法：find()、iterate()、filter()和delete(String hqlSelectQuery) <br />* saveOrUpdateCopy()</p><p>Hibernate3.0一律采用createQuery()方法来执行所有的查询语句，采用DELETE 查询语句来执行批量删除，采用merge()方法来替代 saveOrUpdateCopy()方法。</p><p><br />提示：在Hibernate2.1中，Session的delete()方法有几种重载形式，其中参数为HQL查询语句的delete()方法在Hibernate3.0中被废弃，而参数为Ojbect类型的的delete()方法依然被支持。delete(Object o)方法用于删除参数指定的对象，该方法支持级联删除。</p><p>Hibernate2.1没有对批量更新和批量删除提供很好的支持，参见&lt;&lt;精通Hibernate&gt;&gt;一书的第13章的13.1.1节（批量更新和批量删除），而Hibernate3.0对批量更新和批量删除提供了支持，能够直接执行批量更新或批量删除语句，无需把被更新或删除的对象先加载到内存中。以下是通过Hibernate3.0执行批量更新的程序代码：</p><p>Session session = sessionFactory.openSession();<br />Transaction tx = session.beginTransaction();</p><p>String hqlUpdate = "update Customer set name = :newName where name = :oldName";<br />int updatedEntities = s.createQuery( hqlUpdate )<br />.setString( "newName", newName )<br />.setString( "oldName", oldName )<br />.executeUpdate();<br />tx.commit();<br />session.close();</p><p>以下是通过Hibernate3.0执行批量删除的程序代码：</p><p>Session session = sessionFactory.openSession();<br />Transaction tx = session.beginTransaction();</p><p>String hqlDelete = "delete Customer where name = :oldName";<br />int deletedEntities = s.createQuery( hqlDelete )<br />.setString( "oldName", oldName )<br />.executeUpdate();<br />tx.commit();<br />session.close();</p><p>1.1.6 createSQLQuery()</p><p>在Hibernate3.0中，Session接口的createSQLQuery()方法被废弃，被移到org.hibernate.classic.Session接口中。Hibernate3.0采用新的SQLQuery接口来完成相同的功能。</p><p>1.1.7 Lifecycle 和 Validatable 接口</p><p>Lifecycle和Validatable 接口被废弃，并且被移到org.hibernate.classic包中。</p><p>1.1.8 Interceptor接口</p><p>在Interceptor 接口中加入了两个新的方法。 用户创建的Interceptor实现类在升级的过程中，需要为这两个新方法提供方法体为空的实现。此外，instantiate()方法的参数作了修改，isUnsaved()方法被改名为isTransient()。</p><p>1.1.9 UserType和CompositeUserType接口</p><p>在UserType和CompositeUserType接口中都加入了一些新的方法，这两个接口被移到org.hibernate.usertype包中，用户定义的UserType和CompositeUserType实现类必须实现这些新方法。</p><p>Hibernate3.0提供了ParameterizedType接口，用于更好的重用用户自定义的类型。</p><p>1.1.10 FetchMode类</p><p>FetchMode.LAZY 和 FetchMode.EAGER被废弃。取而代之的分别为FetchMode.SELECT 和FetchMode.JOIN。</p><p>1.1.11 PersistentEnum类</p><p>PersistentEnum被废弃并删除。已经存在的应用应该采用UserType来处理枚举类型。</p><p>1.1.12 对Blob 和Clob的支持</p><p>Hibernate对Blob和Clob实例进行了包装，使得那些拥有Blob或Clob类型的属性的类的实例可以被游离、序列化或反序列化，以及传递到merge()方法中。</p><p>1.1.13 Hibernate中供扩展的API的变化</p><p>org.hibernate.criterion、 org.hibernate.mapping、 org.hibernate.persister和org.hibernate.collection 包的结构和实现发生了重大的变化。多数基于Hibernate <br />2.1 的应用不依赖于这些包，因此不会被影响。如果你的应用扩展了这些包中的类，那么必须非常小心的对受影响的程序代码进行升级。</p><p>1.2 元数据的变化</p><p>1.2.1 检索策略</p><p>在Hibernate2.1中，lazy属性的默认值为“false”，而在Hibernate3.0中，lazy属性的默认值为“true”。在升级映射文件时，如果原来的映射文件中的有关元素，如&lt;set&gt;、&lt;class&gt;等没有显式设置lazy属性，那么必须把它们都显式的设置为lazy=“true”。如果觉得这种升级方式很麻烦，可以采取另一简单的升级方式：在&lt;hibernate-mapping&gt;元素中设置: default-lazy=“false”。 </p><p>1.2.2 对象标识符的映射</p><p>unsaved-value属性是可选的，在多数情况下，Hibernate3.0将把unsaved-value="0" 作为默认值。</p><p>在Hibernate3.0中，当使用自然主键和游离对象时，不再强迫实现Interceptor.isUnsaved()方法。 如果没有设置这个方法，当Hibernate3.0无法区分对象的状态时，会查询数据库，来判断这个对象到底是临时对象，还是游离对象。不过，显式的使用Interceptor.isUnsaved()方法会获得更好的性能，因为这可以减少Hibernate直接访问数据库的次数。</p><p>1.2.3 集合映射</p><p>&lt;index&gt;元素在某些情况下被&lt;list-index&gt;和&lt;map-key&gt;元素替代。此外，Hibernate3.0用&lt;map-key-many-to-many&gt; 元素来替代原来的&lt;key-many-to-many&gt;.元素，用&lt;composite-map-key&gt;元素来替代原来的&lt;composite-index&gt;元素。</p><p>1.2.4 DTD</p><p>对象-关系映射文件中的DTD文档，由原来的：<br /><a href="http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd</a><br />改为：<br /><a href="http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd</a></p><p>1.3 查询语句的变化</p><p>Hibernate3.0 采用新的基于ANTLR的HQL/SQL查询翻译器，不过，Hibernate2.1的查询翻译器也依然存在。在Hibernate的配置文件中，hibernate.query.factory_class属性用来选择查询翻译器。例如：<br />（1）选择Hibernate3.0的查询翻译器：<br />hibernate.query.factory_class= org.hibernate.hql.ast.ASTQueryTranslatorFactory<br />（2）选择Hibernate2.1的查询翻译器<br />hibernate.query.factory_class= org.hibernate.hql.classic.ClassicQueryTranslatorFactory</p><p><br />提示：ANTLR是用纯Java语言编写出来的一个编译工具，它可生成Java语言或者是C++的词法和语法分析器，并可产生语法分析树并对该树进行遍历。ANTLR由于是纯Java的，因此可以安装在任意平台上，但是需要JDK的支持。</p><p>Hibernate开发小组尽力保证Hibernate3.0的查询翻译器能够支持Hibernate2.1的所有查询语句。不过，对于许多已经存在的应用，在升级过程中，也不妨仍然使用Hibernate2.1的查询翻译器。<br />值得注意的是， Hibernate3.0的查询翻译器存在一个Bug：不支持某些theta-style连结查询方言：如Oracle8i的OracleDialect方言、Sybase11Dialect。解决这一问题的办法有两种：（1）改为使用支持ANSI-style连结查询的方言，如 Oracle9Dialect,（2）如果升级的时候遇到这一问题，那么还是改为使用Hibernate2.1的查询翻译器。</p><p>1.3.1 indices()和elements()函数</p><p>在HQL的select子句中废弃了indices()和elements()函数，因为这两个函数的语法很让用户费解，可以用显式的连接查询语句来替代 select elements(...) 。而在HQL的where子句中，仍然可以使用elements()函数。</p><img src ="http://www.blogjava.net/Weibo-Forum/aggbug/36585.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Weibo-Forum/" target="_blank">微薄社区</a> 2006-03-21 11:19 <a href="http://www.blogjava.net/Weibo-Forum/archive/2006/03/21/36585.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>