﻿<?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-willpower88-随笔分类-JAVA 基础</title><link>http://www.blogjava.net/willpower88/category/7448.html</link><description>对JAVA有点理解了……</description><language>zh-cn</language><lastBuildDate>Thu, 02 Mar 2017 19:55:24 GMT</lastBuildDate><pubDate>Thu, 02 Mar 2017 19:55:24 GMT</pubDate><ttl>60</ttl><item><title>【转】 2017 年不容错过的 10+ 个开源 Java 库</title><link>http://www.blogjava.net/willpower88/archive/2017/03/02/432356.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Thu, 02 Mar 2017 09:36:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2017/03/02/432356.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/432356.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2017/03/02/432356.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/432356.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/432356.html</trackback:ping><description><![CDATA[<div style="display: inline-block;"><h3 style="font-size: 16px; line-height: 1.5em; margin: 0px 0px 0.5em 100px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f7f7f7;"></h3></div><div>http://www.iteye.com/news/32170<br /><br />Guice OKHttp Retrofit&nbsp;</div><img src ="http://www.blogjava.net/willpower88/aggbug/432356.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2017-03-02 17:36 <a href="http://www.blogjava.net/willpower88/archive/2017/03/02/432356.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>log4j配置详解</title><link>http://www.blogjava.net/willpower88/archive/2014/07/17/415930.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Thu, 17 Jul 2014 03:10:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2014/07/17/415930.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/415930.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2014/07/17/415930.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/415930.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/415930.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><div style="display: inline-block;">pasting</div><br />log4j.properties&nbsp;使用<br />一.参数意义说明<br />输出级别的种类<br />ERROR、WARN、INFO、DEBUG<br />ERROR&nbsp;为严重错误&nbsp;主要是程序的错误<br />WARN&nbsp;为一般警告，比如session丢失<br />INFO&nbsp;为一般要显示的信息，比如登录登出<br />DEBUG&nbsp;为程序的调试信息<br />配置日志信息输出目的地<br />log4j.appender.appenderName&nbsp;=&nbsp;fully.qualified.name.of.appender.<span style="color: #0000FF; ">class</span><br />1.org.apache.log4j.ConsoleAppender（控制台）<br />2.org.apache.log4j.FileAppender（文件）<br />3.org.apache.log4j.DailyRollingFileAppender（每天产生一个日志文件）<br />4.org.apache.log4j.RollingFileAppender（文件大小到达指定尺寸的时候产生一个新的文件）<br />5.org.apache.log4j.WriterAppender（将日志信息以流格式发送到任意指定的地方）<br />配置日志信息的格式<br />log4j.appender.appenderName.layout&nbsp;=&nbsp;fully.qualified.name.of.layout.<span style="color: #0000FF; ">class</span><br />1.org.apache.log4j.HTMLLayout（以HTML表格形式布局），<br />2.org.apache.log4j.PatternLayout（可以灵活地指定布局模式），<br />3.org.apache.log4j.SimpleLayout（包含日志信息的级别和信息字符串），<br />4.org.apache.log4j.TTCCLayout（包含日志产生的时间、线程、类别等等信息）<br />控制台选项<br />Threshold=DEBUG:指定日志消息的输出最低层次。<br />ImmediateFlush=<span style="color: #0000FF; ">true</span>:默认值是true,意谓着所有的消息都会被立即输出。<br />Target=System.err：默认情况下是：System.out,指定输出控制台<br />FileAppender&nbsp;选项<br />Threshold=DEBUF:指定日志消息的输出最低层次。<br />ImmediateFlush=<span style="color: #0000FF; ">true</span>:默认值是true,意谓着所有的消息都会被立即输出。<br />File=mylog.txt:指定消息输出到mylog.txt文件。<br />Append=<span style="color: #0000FF; ">false</span>:默认值是true,即将消息增加到指定文件中，false指将消息覆盖指定的文件内容。<br />RollingFileAppender&nbsp;选项<br />Threshold=DEBUG:指定日志消息的输出最低层次。<br />ImmediateFlush=<span style="color: #0000FF; ">true</span>:默认值是true,意谓着所有的消息都会被立即输出。<br />File=mylog.txt:指定消息输出到mylog.txt文件。<br />Append=<span style="color: #0000FF; ">false</span>:默认值是true,即将消息增加到指定文件中，false指将消息覆盖指定的文件内容。<br />MaxFileSize=100KB:&nbsp;后缀可以是KB,&nbsp;MB&nbsp;或者是&nbsp;GB.&nbsp;在日志文件到达该大小时，将会自动滚动，即将原来的内容移到mylog.log.1文件。<br />MaxBackupIndex=2:指定可以产生的滚动文件的最大数。<br />log4j.appender.A1.layout.ConversionPattern=%-4r&nbsp;%-5p&nbsp;%d{yyyy-MM-dd&nbsp;HH:mm:ssS}&nbsp;%c&nbsp;%m%n<br />日志信息格式中几个符号所代表的含义：<br />&nbsp;-X号:&nbsp;X信息输出时左对齐；<br />&nbsp;%p:&nbsp;输出日志信息优先级，即DEBUG，INFO，WARN，ERROR，FATAL,<br />&nbsp;%d:&nbsp;输出日志时间点的日期或时间，默认格式为ISO8601，也可以在其后指定格式，比如：%d{yyy&nbsp;MMM&nbsp;dd&nbsp;HH:mm:ss,SSS}，输出类似：2002年10月18日&nbsp;22：10：28，921<br />&nbsp;%r:&nbsp;输出自应用启动到输出该log信息耗费的毫秒数<br />&nbsp;%c:&nbsp;输出日志信息所属的类目，通常就是所在类的全名<br />&nbsp;%t:&nbsp;输出产生该日志事件的线程名<br />&nbsp;%l:&nbsp;输出日志事件的发生位置，相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程，以及在代码中的行数。举例：Testlog4.main&nbsp;(TestLog4.java:10)<br />&nbsp;%x:&nbsp;输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java&nbsp;servlets这样的多客户多线程的应用中。<br />&nbsp;%%:&nbsp;输出一个"%"字符<br />&nbsp;%F:&nbsp;输出日志消息产生时所在的文件名称<br />&nbsp;%L:&nbsp;输出代码中的行号<br />&nbsp;%m:&nbsp;输出代码中指定的消息,产生的日志具体信息<br />&nbsp;%n:&nbsp;输出一个回车换行符，Windows平台为"/r/n"，Unix平台为"/n"输出日志信息换行<br />&nbsp;可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如：<br />&nbsp;1)%20c：指定输出category的名称，最小的宽度是20，如果category的名称小于20的话，默认的情况下右对齐。<br />&nbsp;2)%-20c:指定输出category的名称，最小的宽度是20，如果category的名称小于20的话，"-"号指定左对齐。<br />&nbsp;3)%.30c:指定输出category的名称，最大的宽度是30，如果category的名称大于30的话，就会将左边多出的字符截掉，但小于30的话也不会有空格。<br />&nbsp;4)%20.30c:如果category的名称小于20就补空格，并且右对齐，如果其名称长于30字符，就从左边较远输出的字符截掉。<br />二.文件配置Sample1<br />log4j.rootLogger=DEBUG,A1,R<br />#log4j.rootLogger=INFO,A1,R<br />#&nbsp;ConsoleAppender&nbsp;输出<br />log4j.appender.A1=org.apache.log4j.ConsoleAppender<br />log4j.appender.A1.layout=org.apache.log4j.PatternLayout<br />log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd&nbsp;HH:mm:ss,SSS}&nbsp;[%c]-[%p]&nbsp;%m%n<br />#&nbsp;File&nbsp;输出&nbsp;一天一个文件,输出路径可以定制,一般在根路径下<br />log4j.appender.R=org.apache.log4j.DailyRollingFileAppender<br />log4j.appender.R.File=blog_log.txt<br />log4j.appender.R.MaxFileSize=500KB<br />log4j.appender.R.MaxBackupIndex=10<br />log4j.appender.R.layout=org.apache.log4j.PatternLayout<br />log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd&nbsp;HH:mm:ss,SSS}&nbsp;[%t]&nbsp;[%c]&nbsp;[%p]&nbsp;-&nbsp;%m%n<br />文件配置Sample2<br />下面给出的Log4J配置文件实现了输出到控制台，文件，回滚文件，发送日志邮件，输出到数据库日志表，自定义标签等全套功能。<br />log4j.rootLogger=DEBUG,CONSOLE,A1,im&nbsp;<br />#DEBUG,CONSOLE,FILE,ROLLING_FILE,MAIL,DATABASE<br />log4j.addivity.org.apache=<span style="color: #0000FF; ">true</span><br />###################&nbsp;<br />#&nbsp;Console&nbsp;Appender&nbsp;<br />###################&nbsp;<br />log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender&nbsp;<br />log4j.appender.Threshold=DEBUG&nbsp;<br />log4j.appender.CONSOLE.Target=System.out&nbsp;<br />log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout&nbsp;<br />log4j.appender.CONSOLE.layout.ConversionPattern=[framework]&nbsp;%d&nbsp;-&nbsp;%c&nbsp;-%-4r&nbsp;[%t]&nbsp;%-5p&nbsp;%c&nbsp;%x&nbsp;-&nbsp;%m%n&nbsp;<br />#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]&nbsp;n%c[CATEGORY]%n%m[MESSAGE]%n%n<br />#####################&nbsp;<br />#&nbsp;File&nbsp;Appender&nbsp;<br />#####################&nbsp;<br />log4j.appender.FILE=org.apache.log4j.FileAppender&nbsp;<br />log4j.appender.FILE.File=file.log&nbsp;<br />log4j.appender.FILE.Append=<span style="color: #0000FF; ">false</span>&nbsp;<br />log4j.appender.FILE.layout=org.apache.log4j.PatternLayout&nbsp;<br />log4j.appender.FILE.layout.ConversionPattern=[framework]&nbsp;%d&nbsp;-&nbsp;%c&nbsp;-%-4r&nbsp;[%t]&nbsp;%-5p&nbsp;%c&nbsp;%x&nbsp;-&nbsp;%m%n&nbsp;<br />#&nbsp;Use&nbsp;<span style="color: #0000FF; ">this</span>&nbsp;layout&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;LogFactor&nbsp;5&nbsp;analysis<br />########################&nbsp;<br />#&nbsp;Rolling&nbsp;File&nbsp;<br />########################&nbsp;<br />log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender&nbsp;<br />log4j.appender.ROLLING_FILE.Threshold=ERROR&nbsp;<br />log4j.appender.ROLLING_FILE.File=rolling.log&nbsp;<br />log4j.appender.ROLLING_FILE.Append=<span style="color: #0000FF; ">true</span>&nbsp;<br />log4j.appender.ROLLING_FILE.MaxFileSize=10KB&nbsp;<br />log4j.appender.ROLLING_FILE.MaxBackupIndex=1&nbsp;<br />log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout&nbsp;<br />log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework]&nbsp;%d&nbsp;-&nbsp;%c&nbsp;-%-4r&nbsp;[%t]&nbsp;%-5p&nbsp;%c&nbsp;%x&nbsp;-&nbsp;%m%n<br />####################&nbsp;<br />#&nbsp;Socket&nbsp;Appender&nbsp;<br />####################&nbsp;<br />log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender&nbsp;<br />log4j.appender.SOCKET.RemoteHost=localhost&nbsp;<br />log4j.appender.SOCKET.Port=5001&nbsp;<br />log4j.appender.SOCKET.LocationInfo=<span style="color: #0000FF; ">true</span>&nbsp;<br />#&nbsp;Set&nbsp;up&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;Log&nbsp;Facter&nbsp;5&nbsp;<br />log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout&nbsp;<br />log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n<br />########################&nbsp;<br />#&nbsp;Log&nbsp;Factor&nbsp;5&nbsp;Appender&nbsp;<br />########################&nbsp;<br />log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender&nbsp;<br />log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000<br />########################&nbsp;<br />#&nbsp;SMTP&nbsp;Appender&nbsp;<br />#######################&nbsp;<br />log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender&nbsp;<br />log4j.appender.MAIL.Threshold=FATAL&nbsp;<br />log4j.appender.MAIL.BufferSize=10&nbsp;<br />log4j.appender.MAIL.From=chenyl@yeqiangwei.com<br />log4j.appender.MAIL.SMTPHost=mail.hollycrm.com&nbsp;<br />log4j.appender.MAIL.Subject=Log4J&nbsp;Message&nbsp;<br />log4j.appender.MAIL.To=chenyl@yeqiangwei.com<br />log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout&nbsp;<br />log4j.appender.MAIL.layout.ConversionPattern=[framework]&nbsp;%d&nbsp;-&nbsp;%c&nbsp;-%-4r&nbsp;[%t]&nbsp;%-5p&nbsp;%c&nbsp;%x&nbsp;-&nbsp;%m%n<br />########################&nbsp;<br />#&nbsp;JDBC&nbsp;Appender&nbsp;<br />#######################&nbsp;<br />log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender&nbsp;<br />log4j.appender.DATABASE.URL=jdbc:mysql:<span style="color: #008000; ">//</span><span style="color: #008000; ">localhost:3306/test&nbsp;</span><span style="color: #008000; "><br /></span>log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver&nbsp;<br />log4j.appender.DATABASE.user=root&nbsp;<br />log4j.appender.DATABASE.password=&nbsp;<br />log4j.appender.DATABASE.sql=INSERT&nbsp;INTO&nbsp;LOG4J&nbsp;(Message)&nbsp;VALUES&nbsp;('[framework]&nbsp;%d&nbsp;-&nbsp;%c&nbsp;-%-4r&nbsp;[%t]&nbsp;%-5p&nbsp;%c&nbsp;%x&nbsp;-&nbsp;%m%n')&nbsp;<br />log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout&nbsp;<br />log4j.appender.DATABASE.layout.ConversionPattern=[framework]&nbsp;%d&nbsp;-&nbsp;%c&nbsp;-%-4r&nbsp;[%t]&nbsp;%-5p&nbsp;%c&nbsp;%x&nbsp;-&nbsp;%m%n<br />log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender&nbsp;<br />log4j.appender.A1.File=SampleMessages.log4j&nbsp;<br />log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'&nbsp;<br />log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout<br />###################&nbsp;<br />#自定义Appender&nbsp;<br />###################&nbsp;<br />log4j.appender.im&nbsp;=&nbsp;net.cybercorlin.util.logger.appender.IMAppender<br />log4j.appender.im.host&nbsp;=&nbsp;mail.cybercorlin.net&nbsp;<br />log4j.appender.im.username&nbsp;=&nbsp;username&nbsp;<br />log4j.appender.im.password&nbsp;=&nbsp;password&nbsp;<br />log4j.appender.im.recipient&nbsp;=&nbsp;corlin@yeqiangwei.com<br />log4j.appender.im.layout=org.apache.log4j.PatternLayout&nbsp;<br />log4j.appender.im.layout.ConversionPattern&nbsp;=[framework]&nbsp;%d&nbsp;-&nbsp;%c&nbsp;-%-4r&nbsp;[%t]&nbsp;%-5p&nbsp;%c&nbsp;%x&nbsp;-&nbsp;%m%n<br />三.高级使用<br />实验目的：<br />&nbsp;1.把FATAL级错误写入2000NT日志<br />&nbsp;2.&nbsp;WARN，ERROR，FATAL级错误发送email通知管理员<br />&nbsp;3.其他级别的错误直接在后台输出<br />实验步骤：<br />&nbsp;输出到2000NT日志<br />&nbsp;1.把Log4j压缩包里的NTEventLogAppender.dll拷到WINNT/SYSTEM32目录下<br />&nbsp;2.写配置文件log4j.properties<br />#&nbsp;在2000系统日志输出<br />&nbsp;log4j.logger.NTlog=FATAL,&nbsp;A8<br />&nbsp;#&nbsp;APPENDER&nbsp;A8<br />&nbsp;log4j.appender.A8=org.apache.log4j.nt.NTEventLogAppender<br />&nbsp;log4j.appender.A8.Source=JavaTest<br />&nbsp;log4j.appender.A8.layout=org.apache.log4j.PatternLayout<br />&nbsp;log4j.appender.A8.layout.ConversionPattern=%-4r&nbsp;%-5p&nbsp;[%t]&nbsp;%37c&nbsp;%3x&nbsp;-&nbsp;%m%n<br />3.调用代码：<br />&nbsp;Logger&nbsp;logger2&nbsp;=&nbsp;Logger.getLogger("NTlog");&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">要和配置文件中设置的名字相同</span><span style="color: #008000; "><br /></span>&nbsp;logger2.debug("debug!!!");<br />&nbsp;logger2.info("info!!!");<br />&nbsp;logger2.warn("warn!!!");<br />&nbsp;logger2.error("error!!!");<br />&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">只有这个错误才会写入2000日志</span><span style="color: #008000; "><br /></span>&nbsp;logger2.fatal("fatal!!!");<br />发送email通知管理员：<br />&nbsp;1.&nbsp;首先下载JavaMail和JAF,&nbsp;<br />&nbsp;&nbsp;http:<span style="color: #008000; ">//</span><span style="color: #008000; ">java.sun.com/j2ee/ja/javamail/index.html</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;http:<span style="color: #008000; ">//</span><span style="color: #008000; ">java.sun.com/beans/glasgow/jaf.html</span><span style="color: #008000; "><br /></span>&nbsp;在项目中引用mail.jar和activation.jar。<br />&nbsp;2.&nbsp;写配置文件<br />&nbsp;#&nbsp;将日志发送到email<br />&nbsp;log4j.logger.MailLog=WARN,A5<br />&nbsp;#&nbsp;&nbsp;APPENDER&nbsp;A5<br />&nbsp;log4j.appender.A5=org.apache.log4j.net.SMTPAppender<br />&nbsp;log4j.appender.A5.BufferSize=5<br />&nbsp;log4j.appender.A5.To=chunjie@yeqiangwei.com<br />&nbsp;log4j.appender.A5.From=error@yeqiangwei.com<br />&nbsp;log4j.appender.A5.Subject=ErrorLog<br />&nbsp;log4j.appender.A5.SMTPHost=smtp.263.net<br />&nbsp;log4j.appender.A5.layout=org.apache.log4j.PatternLayout<br />&nbsp;log4j.appender.A5.layout.ConversionPattern=%-4r&nbsp;%-5p&nbsp;[%t]&nbsp;%37c&nbsp;%3x&nbsp;-&nbsp;%m%n<br />&nbsp;3.调用代码：<br />&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">把日志发送到mail</span><span style="color: #008000; "><br /></span>&nbsp;Logger&nbsp;logger3&nbsp;=&nbsp;Logger.getLogger("MailLog");<br />&nbsp;logger3.warn("warn!!!");<br />&nbsp;logger3.error("error!!!");<br />&nbsp;logger3.fatal("fatal!!!");<br />在后台输出所有类别的错误：<br />&nbsp;1.&nbsp;写配置文件<br />&nbsp;#&nbsp;在后台输出<br />&nbsp;log4j.logger.console=DEBUG,&nbsp;A1<br />&nbsp;#&nbsp;APPENDER&nbsp;A1<br />&nbsp;log4j.appender.A1=org.apache.log4j.ConsoleAppender<br />&nbsp;log4j.appender.A1.layout=org.apache.log4j.PatternLayout<br />&nbsp;log4j.appender.A1.layout.ConversionPattern=%-4r&nbsp;%-5p&nbsp;[%t]&nbsp;%37c&nbsp;%3x&nbsp;-&nbsp;%m%n<br />&nbsp;2．调用代码<br />&nbsp;Logger&nbsp;logger1&nbsp;=&nbsp;Logger.getLogger("console");<br />&nbsp;logger1.debug("debug!!!");<br />&nbsp;logger1.info("info!!!");<br />&nbsp;logger1.warn("warn!!!");<br />&nbsp;logger1.error("error!!!");<br />&nbsp;logger1.fatal("fatal!!!");<br />--------------------------------------------------------------------<br />&nbsp;全部配置文件：log4j.properties<br />&nbsp;#&nbsp;在后台输出<br />&nbsp;log4j.logger.console=DEBUG,&nbsp;A1<br />&nbsp;#&nbsp;APPENDER&nbsp;A1<br />&nbsp;log4j.appender.A1=org.apache.log4j.ConsoleAppender<br />&nbsp;log4j.appender.A1.layout=org.apache.log4j.PatternLayout<br />&nbsp;log4j.appender.A1.layout.ConversionPattern=%-4r&nbsp;%-5p&nbsp;[%t]&nbsp;%37c&nbsp;%3x&nbsp;-&nbsp;%m%n<br />#&nbsp;在2000系统日志输出<br />&nbsp;log4j.logger.NTlog=FATAL,&nbsp;A8<br />&nbsp;#&nbsp;APPENDER&nbsp;A8<br />&nbsp;log4j.appender.A8=org.apache.log4j.nt.NTEventLogAppender<br />&nbsp;log4j.appender.A8.Source=JavaTest<br />&nbsp;log4j.appender.A8.layout=org.apache.log4j.PatternLayout<br />&nbsp;log4j.appender.A8.layout.ConversionPattern=%-4r&nbsp;%-5p&nbsp;[%t]&nbsp;%37c&nbsp;%3x&nbsp;-&nbsp;%m%n<br />#&nbsp;将日志发送到email<br />&nbsp;log4j.logger.MailLog=WARN,A5<br />&nbsp;#&nbsp;&nbsp;APPENDER&nbsp;A5<br />&nbsp;log4j.appender.A5=org.apache.log4j.net.SMTPAppender<br />&nbsp;log4j.appender.A5.BufferSize=5<br />&nbsp;log4j.appender.A5.To=chunjie@yeqiangwei.com<br />&nbsp;log4j.appender.A5.From=error@yeqiangwei.com<br />&nbsp;log4j.appender.A5.Subject=ErrorLog<br />&nbsp;log4j.appender.A5.SMTPHost=smtp.263.net<br />&nbsp;log4j.appender.A5.layout=org.apache.log4j.PatternLayout<br />&nbsp;log4j.appender.A5.layout.ConversionPattern=%-4r&nbsp;%-5p&nbsp;[%t]&nbsp;%37c&nbsp;%3x&nbsp;-&nbsp;%m%n<br />全部代码：Log4jTest.java<br />&nbsp;&nbsp;<br /><span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;<br />&nbsp;&nbsp;*&nbsp;创建日期&nbsp;2003-11-13&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span>&nbsp;<br />&nbsp;<span style="color: #0000FF; ">package</span>&nbsp;edu.bcu.Bean;&nbsp;<br />&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;org.apache.log4j.*;&nbsp;<br />&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">import&nbsp;org.apache.log4j.nt.*;&nbsp;<br />&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">import&nbsp;org.apache.log4j.net.*;&nbsp;</span><span style="color: #008000; "><br /></span>&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; ">&nbsp;<br />&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@author</span><span style="color: #008000; ">&nbsp;yanxu&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span>&nbsp;<br />&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;Log4jTest&nbsp;<br />&nbsp;{&nbsp;<br />&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;main(String&nbsp;args[])&nbsp;<br />&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;PropertyConfigurator.configure("log4j.properties");&nbsp;<br />&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">在后台输出&nbsp;</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;Logger&nbsp;logger1&nbsp;=&nbsp;Logger.getLogger("console");&nbsp;<br />&nbsp;&nbsp;&nbsp;logger1.debug("debug!!!");&nbsp;<br />&nbsp;&nbsp;&nbsp;logger1.info("info!!!");&nbsp;<br />&nbsp;&nbsp;&nbsp;logger1.warn("warn!!!");&nbsp;<br />&nbsp;&nbsp;&nbsp;logger1.error("error!!!");&nbsp;<br />&nbsp;&nbsp;&nbsp;logger1.fatal("fatal!!!");<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">在NT系统日志输出&nbsp;</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;Logger&nbsp;logger2&nbsp;=&nbsp;Logger.getLogger("NTlog");&nbsp;<br />&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">NTEventLogAppender&nbsp;nla&nbsp;=&nbsp;new&nbsp;NTEventLogAppender();&nbsp;</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;logger2.debug("debug!!!");&nbsp;<br />&nbsp;&nbsp;&nbsp;logger2.info("info!!!");&nbsp;<br />&nbsp;&nbsp;&nbsp;logger2.warn("warn!!!");&nbsp;<br />&nbsp;&nbsp;&nbsp;logger2.error("error!!!");&nbsp;<br />&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">只有这个错误才会写入2000日志&nbsp;</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;logger2.fatal("fatal!!!");<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">把日志发送到mail&nbsp;</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;Logger&nbsp;logger3&nbsp;=&nbsp;Logger.getLogger("MailLog");&nbsp;<br />&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">SMTPAppender&nbsp;sa&nbsp;=&nbsp;new&nbsp;SMTPAppender();&nbsp;</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;logger3.warn("warn!!!");&nbsp;<br />&nbsp;&nbsp;&nbsp;logger3.error("error!!!");&nbsp;<br />&nbsp;&nbsp;&nbsp;logger3.fatal("fatal!!!");&nbsp;<br />&nbsp;&nbsp;}&nbsp;<br />&nbsp;}</div><img src ="http://www.blogjava.net/willpower88/aggbug/415930.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2014-07-17 11:10 <a href="http://www.blogjava.net/willpower88/archive/2014/07/17/415930.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java编译时中文问题</title><link>http://www.blogjava.net/willpower88/archive/2011/06/24/352968.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Fri, 24 Jun 2011 07:38:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2011/06/24/352968.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/352968.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2011/06/24/352968.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/352968.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/352968.html</trackback:ping><description><![CDATA[可以通过加编译参数encoding gbk，执行时加-Dfile.encoding="GBK"的办法来解决，具体命令行：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">javac&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">encoding&nbsp;gbk&nbsp;TTT.java&nbsp;&nbsp;<br />java&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">Dfile.encoding</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">GBK</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;TTT <br /></span></div><img src ="http://www.blogjava.net/willpower88/aggbug/352968.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2011-06-24 15:38 <a href="http://www.blogjava.net/willpower88/archive/2011/06/24/352968.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java位运算应用</title><link>http://www.blogjava.net/willpower88/archive/2010/10/29/336470.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Fri, 29 Oct 2010 04:21:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2010/10/29/336470.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/336470.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2010/10/29/336470.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/336470.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/336470.html</trackback:ping><description><![CDATA[<p>摘自：http://edu.codepub.com/2009/0929/15909.php<br />
应用举例 <br />
(1) 判断int型变量a是奇数还是偶数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
a&amp;1&nbsp; = 0 偶数 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a&amp;1 =&nbsp; 1 奇数 <br />
(2) 取int型变量a的第k位 (k=0,1,2&#8230;&#8230;sizeof(int))，即a&gt;&gt;k&amp;1 <br />
(3) 将int型变量a的第k位清0，即a=a&amp;~(1 &lt; &lt;k) <br />
(4) 将int型变量a的第k位置1， 即a=a &#166;(1 &lt; &lt;k) <br />
(5) int型变量循环左移k次，即a=a &lt; &lt;k &#166;a&gt;&gt;16-k&nbsp; (设sizeof(int)=16) <br />
(6) int型变量a循环右移k次，即a=a&gt;&gt;k &#166;a &lt; &lt;16-k&nbsp; (设sizeof(int)=16) <br />
(7)整数的平均值 <br />
对于两个整数x,y，如果用 (x+y)/2 求平均值，会产生溢出，因为 x+y 可能会大于INT_MAX，但是我们知道它们的平均值是肯定不会溢出的，我们用如下算法： <br />
int average(int x, int y)&nbsp; //返回X,Y 的平均值 <br />
{&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; return (x&amp;y)+((x^y)&gt;&gt;1); <br />
} <br />
(8)判断一个整数是不是2的幂,对于一个数 x &gt;= 0，判断他是不是2的幂 <br />
boolean power2(int x) <br />
{ <br />
&nbsp;&nbsp;&nbsp; return ((x&amp;(x-1))==0)&amp;&amp;(x!=0)； <br />
} <br />
(9)不用temp交换两个整数 <br />
void swap(int x , int y) <br />
{ <br />
&nbsp;&nbsp;&nbsp; x ^= y; <br />
&nbsp;&nbsp;&nbsp; y ^= x; <br />
&nbsp;&nbsp;&nbsp; x ^= y; <br />
} <br />
(10)计算绝对值 <br />
int abs( int x ) <br />
{ <br />
int y ; <br />
y = x &gt;&gt; 31 ; <br />
return (x^y)-y ;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //or: (x+y)^y <br />
} <br />
(11)取模运算转化成位运算 (在不产生溢出的情况下) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a % (2^n) 等价于 a &amp; (2^n - 1) <br />
(12)乘法运算转化成位运算 (在不产生溢出的情况下) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a * (2^n) 等价于 a &lt; &lt; n <br />
(13)除法运算转化成位运算 (在不产生溢出的情况下) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a / (2^n) 等价于 a&gt;&gt; n <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例: 12/8 == 12&gt;&gt;3 <br />
(14) a % 2 等价于 a &amp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
(15) if (x == a) x= b; <br />
　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else x= a; <br />
　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 等价于 x= a ^ b ^ x; <br />
(16) x 的 相反数 表示为 (~x+1)</p>
<p><br />
实例</p>
<p>&nbsp;&nbsp;&nbsp; 功能&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 示例&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166;&nbsp;&nbsp;&nbsp; 位运算 <br />
----------------------+---------------------------+-------------------- <br />
去掉最后一位&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166; (101101-&gt;10110)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166; x &gt;&gt; 1 <br />
在最后加一个0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166; (101101-&gt;1011010)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166; x &lt; &lt; 1 <br />
在最后加一个1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166; (101101-&gt;1011011)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166; x &lt; &lt; 1+1 <br />
把最后一位变成1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166; (101100-&gt;101101)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166; x &#166; 1 <br />
把最后一位变成0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166; (101101-&gt;101100)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166; x &#166; 1-1 <br />
最后一位取反&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166; (101101-&gt;101100)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166; x ^ 1 <br />
把右数第k位变成1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166; (101001-&gt;101101,k=3)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166; x &#166; (1 &lt; &lt; (k-1)) <br />
把右数第k位变成0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166; (101101-&gt;101001,k=3)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166; x &amp; ~ (1 &lt; &lt; (k-1)) <br />
右数第k位取反&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166; (101001-&gt;101101,k=3)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166; x ^ (1 &lt; &lt; (k-1)) <br />
取末三位&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166; (1101101-&gt;101)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166; x &amp; 7 <br />
取末k位&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166; (1101101-&gt;1101,k=5)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166; x &amp; ((1 &lt; &lt; k)-1)<br />
</p>
<p>取右数第k位&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166; (1101101-&gt;1,k=4)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166; x &gt;&gt; (k-1) &amp; 1</p>
<p>把末k位变成1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166; (101001-&gt;101111,k=4)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166; x &#166; (1 &lt; &lt; k-1) <br />
末k位取反&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166; (101001-&gt;100110,k=4)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166; x ^ (1 &lt; &lt; k-1) <br />
把右边连续的1变成0&nbsp;&nbsp;&nbsp; &#166; (100101111-&gt;100100000)&nbsp;&nbsp;&nbsp; &#166; x &amp; (x+1) <br />
把右起第一个0变成1&nbsp;&nbsp;&nbsp; &#166; (100101111-&gt;100111111)&nbsp;&nbsp;&nbsp; &#166; x &#166; (x+1) <br />
把右边连续的0变成1&nbsp;&nbsp;&nbsp; &#166; (11011000-&gt;11011111)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166; x &#166; (x-1) <br />
取右边连续的1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166; (100101111-&gt;1111)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166; (x ^ (x+1)) &gt;&gt; 1 <br />
去掉右起第一个1的左边 &#166; (100101000-&gt;1000)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#166; x &amp; (x ^ (x-1)) <br />
判断奇数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (x&amp;1)==1 <br />
判断偶数 (x&amp;1)==0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>例如求从x位（高）到y位（低）间共有多少个1</p>
<p>public static int FindChessNum(int x, int y, ushort k) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int re = 0; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = y; i &lt;= x; i++) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; re += ((k &gt;&gt; (i - 1)) &amp; 1); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return re; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<img src ="http://www.blogjava.net/willpower88/aggbug/336470.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2010-10-29 12:21 <a href="http://www.blogjava.net/willpower88/archive/2010/10/29/336470.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jni带package的java类生成.h</title><link>http://www.blogjava.net/willpower88/archive/2010/10/27/336266.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Wed, 27 Oct 2010 04:17:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2010/10/27/336266.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/336266.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2010/10/27/336266.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/336266.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/336266.html</trackback:ping><description><![CDATA[<p>目录结构：com/test/JniTest.java<br />
<br />
package : com.test<br />
<br />
javac com/test/JniTest.java<br />
<br />
javah -classpath ./ -jni com.test.JniTest<br />
<br />
在当前目录下生成:<br />
com_test_JniTest.h</p>
<img src ="http://www.blogjava.net/willpower88/aggbug/336266.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2010-10-27 12:17 <a href="http://www.blogjava.net/willpower88/archive/2010/10/27/336266.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>权重算法实现</title><link>http://www.blogjava.net/willpower88/archive/2010/08/31/330437.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Tue, 31 Aug 2010 09:08:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2010/08/31/330437.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/330437.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2010/08/31/330437.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/330437.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/330437.html</trackback:ping><description><![CDATA[<br />
需求：广告按权重展现<br />
<br />
<strong>基本算法描述如下:</strong><br />
1、每个广告增加权重<br />
2、将所有匹配广告的权重相加sum，<br />
3、以相加结果为随机数的种子，生成1~sum之间的随机数rd<br />
4、.接着遍历所有广告，访问顺序可以随意.将当前节点的权重值加上前面访问的各节点权重值得curWt,判断curWt &gt;= &nbsp;rd,如果条件成立则返回当前节点,如果不是则继续累加下一节点. 直到符合上面的条件,由于rd&lt;=sum 因此一定存在curWt&gt;=rd。<br />
<strong>特别说明：<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red">此算法和广告的顺序无关<br />
</span><br />
测试代码如下：<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.ArrayList;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.Collections;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.Comparator;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.LinkedHashMap;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.List;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.Map;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img id="Codehighlighter1_205_1581_Open_Image" onclick="this.style.display='none'; Codehighlighter1_205_1581_Open_Text.style.display='none'; Codehighlighter1_205_1581_Closed_Image.style.display='inline'; Codehighlighter1_205_1581_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_205_1581_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_205_1581_Closed_Text.style.display='none'; Codehighlighter1_205_1581_Open_Image.style.display='inline'; Codehighlighter1_205_1581_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Test&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_205_1581_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_205_1581_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img id="Codehighlighter1_209_232_Open_Image" onclick="this.style.display='none'; Codehighlighter1_209_232_Open_Text.style.display='none'; Codehighlighter1_209_232_Closed_Image.style.display='inline'; Codehighlighter1_209_232_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_209_232_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_209_232_Closed_Text.style.display='none'; Codehighlighter1_209_232_Open_Image.style.display='inline'; Codehighlighter1_209_232_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_209_232_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_209_232_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;args<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@SuppressWarnings(</span><span style="color: #000000">"</span><span style="color: #000000">unchecked</span><span style="color: #000000">"</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_306_1159_Open_Image" onclick="this.style.display='none'; Codehighlighter1_306_1159_Open_Text.style.display='none'; Codehighlighter1_306_1159_Closed_Image.style.display='inline'; Codehighlighter1_306_1159_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_306_1159_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_306_1159_Closed_Text.style.display='none'; Codehighlighter1_306_1159_Open_Image.style.display='inline'; Codehighlighter1_306_1159_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_306_1159_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_306_1159_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List</span><span style="color: #000000">&lt;</span><span style="color: #000000">Node</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;arrNodes&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArrayList</span><span style="color: #000000">&lt;</span><span style="color: #000000">Node</span><span style="color: #000000">&gt;</span><span style="color: #000000">();<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Node&nbsp;n&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Node(</span><span style="color: #000000">10</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">测试1</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arrNodes.add(n);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Node(</span><span style="color: #000000">20</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">测试2</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arrNodes.add(n);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Node(</span><span style="color: #000000">30</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">测试3</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arrNodes.add(n);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Node(</span><span style="color: #000000">40</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">测试4</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arrNodes.add(n);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Collections.sort(arrNodes,&nbsp;new&nbsp;Node());</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map</span><span style="color: #000000">&lt;</span><span style="color: #000000">String,&nbsp;Integer</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;showMap&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;sum&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;getSum(arrNodes);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;random&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Node&nbsp;kw&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img id="Codehighlighter1_729_1156_Open_Image" onclick="this.style.display='none'; Codehighlighter1_729_1156_Open_Text.style.display='none'; Codehighlighter1_729_1156_Closed_Image.style.display='inline'; Codehighlighter1_729_1156_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_729_1156_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_729_1156_Closed_Text.style.display='none'; Codehighlighter1_729_1156_Open_Image.style.display='inline'; Codehighlighter1_729_1156_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;k&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;k&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">20</span><span style="color: #000000">;&nbsp;k</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_729_1156_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_729_1156_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;showMap&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;LinkedHashMap</span><span style="color: #000000">&lt;</span><span style="color: #000000">String,&nbsp;Integer</span><span style="color: #000000">&gt;</span><span style="color: #000000">();<br />
<img id="Codehighlighter1_814_1090_Open_Image" onclick="this.style.display='none'; Codehighlighter1_814_1090_Open_Text.style.display='none'; Codehighlighter1_814_1090_Closed_Image.style.display='inline'; Codehighlighter1_814_1090_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_814_1090_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_814_1090_Closed_Text.style.display='none'; Codehighlighter1_814_1090_Open_Image.style.display='inline'; Codehighlighter1_814_1090_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">100</span><span style="color: #000000">;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_814_1090_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_814_1090_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;random&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;getRandom(sum);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kw&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;getKW(arrNodes,&nbsp;random);<br />
<img id="Codehighlighter1_914_969_Open_Image" onclick="this.style.display='none'; Codehighlighter1_914_969_Open_Text.style.display='none'; Codehighlighter1_914_969_Closed_Image.style.display='inline'; Codehighlighter1_914_969_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_914_969_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_914_969_Closed_Text.style.display='none'; Codehighlighter1_914_969_Open_Image.style.display='inline'; Codehighlighter1_914_969_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(showMap.containsKey(kw.kw))&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_914_969_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_914_969_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;showMap.put(kw.kw,&nbsp;showMap.get(kw.kw)&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">);<br />
<img id="Codehighlighter1_976_1010_Open_Image" onclick="this.style.display='none'; Codehighlighter1_976_1010_Open_Text.style.display='none'; Codehighlighter1_976_1010_Closed_Image.style.display='inline'; Codehighlighter1_976_1010_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_976_1010_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_976_1010_Closed_Text.style.display='none'; Codehighlighter1_976_1010_Open_Image.style.display='inline'; Codehighlighter1_976_1010_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_976_1010_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_976_1010_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;showMap.put(kw.kw,&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">System.out.println(i&nbsp;+&nbsp;"&nbsp;"&nbsp;+random&nbsp;+&nbsp;"&nbsp;"&nbsp;+&nbsp;getKW(arrNodes,&nbsp;random));</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(k&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(showMap);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_1215_1367_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1215_1367_Open_Text.style.display='none'; Codehighlighter1_1215_1367_Closed_Image.style.display='inline'; Codehighlighter1_1215_1367_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_1215_1367_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1215_1367_Closed_Text.style.display='none'; Codehighlighter1_1215_1367_Open_Image.style.display='inline'; Codehighlighter1_1215_1367_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;Node&nbsp;getKW(List</span><span style="color: #000000">&lt;</span><span style="color: #000000">Node</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;nodes,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;rd)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1215_1367_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1215_1367_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Node&nbsp;ret&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;curWt&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
<img id="Codehighlighter1_1274_1350_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1274_1350_Open_Text.style.display='none'; Codehighlighter1_1274_1350_Closed_Image.style.display='inline'; Codehighlighter1_1274_1350_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_1274_1350_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1274_1350_Closed_Text.style.display='none'; Codehighlighter1_1274_1350_Open_Image.style.display='inline'; Codehighlighter1_1274_1350_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(Node&nbsp;n&nbsp;:&nbsp;nodes)</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1274_1350_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1274_1350_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curWt&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;n.weight;<br />
<img id="Codehighlighter1_1317_1346_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1317_1346_Open_Text.style.display='none'; Codehighlighter1_1317_1346_Closed_Image.style.display='inline'; Codehighlighter1_1317_1346_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_1317_1346_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1317_1346_Closed_Text.style.display='none'; Codehighlighter1_1317_1346_Open_Image.style.display='inline'; Codehighlighter1_1317_1346_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(curWt&nbsp;</span><span style="color: #000000">&gt;=</span><span style="color: #000000">&nbsp;rd)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1317_1346_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1317_1346_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;n;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;ret;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_1413_1487_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1413_1487_Open_Text.style.display='none'; Codehighlighter1_1413_1487_Closed_Image.style.display='inline'; Codehighlighter1_1413_1487_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_1413_1487_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1413_1487_Closed_Text.style.display='none'; Codehighlighter1_1413_1487_Open_Image.style.display='inline'; Codehighlighter1_1413_1487_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;getSum(List</span><span style="color: #000000">&lt;</span><span style="color: #000000">Node</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;nodes)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1413_1487_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1413_1487_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;sum&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(Node&nbsp;n&nbsp;:&nbsp;nodes)<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;n.weight;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;sum;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_1528_1579_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1528_1579_Open_Text.style.display='none'; Codehighlighter1_1528_1579_Closed_Image.style.display='inline'; Codehighlighter1_1528_1579_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_1528_1579_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1528_1579_Closed_Text.style.display='none'; Codehighlighter1_1528_1579_Open_Image.style.display='inline'; Codehighlighter1_1528_1579_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;getRandom(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;seed)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1528_1579_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1528_1579_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">)Math.round(Math.random()&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;seed);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_1615_2094_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1615_2094_Open_Text.style.display='none'; Codehighlighter1_1615_2094_Closed_Image.style.display='inline'; Codehighlighter1_1615_2094_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_1615_2094_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1615_2094_Closed_Text.style.display='none'; Codehighlighter1_1615_2094_Open_Image.style.display='inline'; Codehighlighter1_1615_2094_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /></span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Node&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Comparator</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1615_2094_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1615_2094_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;weight&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;kw&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_1668_1669_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1668_1669_Open_Text.style.display='none'; Codehighlighter1_1668_1669_Closed_Image.style.display='inline'; Codehighlighter1_1668_1669_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_1668_1669_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1668_1669_Closed_Text.style.display='none'; Codehighlighter1_1668_1669_Open_Image.style.display='inline'; Codehighlighter1_1668_1669_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Node()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1668_1669_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1668_1669_Open_Text"><span style="color: #000000">{}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_1705_1744_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1705_1744_Open_Text.style.display='none'; Codehighlighter1_1705_1744_Closed_Image.style.display='inline'; Codehighlighter1_1705_1744_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_1705_1744_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1705_1744_Closed_Text.style.display='none'; Codehighlighter1_1705_1744_Open_Image.style.display='inline'; Codehighlighter1_1705_1744_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Node(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;wt,&nbsp;String&nbsp;kw)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1705_1744_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1705_1744_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.weight&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;wt;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.kw&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;kw;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_1771_1939_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1771_1939_Open_Text.style.display='none'; Codehighlighter1_1771_1939_Closed_Image.style.display='inline'; Codehighlighter1_1771_1939_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_1771_1939_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1771_1939_Closed_Text.style.display='none'; Codehighlighter1_1771_1939_Open_Image.style.display='inline'; Codehighlighter1_1771_1939_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;toString()</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1771_1939_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1771_1939_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuilder&nbsp;sbBuilder&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StringBuilder();<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sbBuilder.append(</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;weight=</span><span style="color: #000000">"</span><span style="color: #000000">).append(weight);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sbBuilder.append(</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;kw</span><span style="color: #000000">"</span><span style="color: #000000">).append(kw);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;sbBuilder.toString();<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_1983_2092_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1983_2092_Open_Text.style.display='none'; Codehighlighter1_1983_2092_Closed_Image.style.display='inline'; Codehighlighter1_1983_2092_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_1983_2092_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1983_2092_Closed_Text.style.display='none'; Codehighlighter1_1983_2092_Open_Image.style.display='inline'; Codehighlighter1_1983_2092_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;compare(Object&nbsp;o1,&nbsp;Object&nbsp;o2)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1983_2092_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1983_2092_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Node&nbsp;n1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(Node)o1;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Node&nbsp;n2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(Node)o2;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(n1.weight&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;n2.weight)<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span></div>
 <img src ="http://www.blogjava.net/willpower88/aggbug/330437.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2010-08-31 17:08 <a href="http://www.blogjava.net/willpower88/archive/2010/08/31/330437.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jprofier监控java应用程序</title><link>http://www.blogjava.net/willpower88/archive/2010/05/26/321887.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Wed, 26 May 2010 02:12:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2010/05/26/321887.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/321887.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2010/05/26/321887.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/321887.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/321887.html</trackback:ping><description><![CDATA[<br />
1、安装jprofiler6 google一下<br />
2、修改~/.bashrc，根据你的安装路径配置：<br />
<br />
export LD_LIBRARY_PATH='/home/work/jprofiler6/bin/linux-x64'<br />
export JPROFILER_HOME='/home/work/jprofiler6/bin/linux-x64'<br />
<br />
3、启动java应用程序<br />
java -agentlib:jprofilerti=port=8849 -Xbootclasspath/a:/home/work/jprofiler6/bin/agent.jar JavaApp
<img src ="http://www.blogjava.net/willpower88/aggbug/321887.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2010-05-26 10:12 <a href="http://www.blogjava.net/willpower88/archive/2010/05/26/321887.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>离线分析java内存</title><link>http://www.blogjava.net/willpower88/archive/2010/05/07/320254.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Fri, 07 May 2010 02:31:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2010/05/07/320254.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/320254.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2010/05/07/320254.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/320254.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/320254.html</trackback:ping><description><![CDATA[<h3><a href="http://dikar.javaeye.com/blog/643436"><br />
</a>摘自：http://dikar.javaeye.com/blog/643436</h3>
<div class="blog_content">
<p><span style="font-size: small">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如题，我这里简单说下我现在离线分析java内存的方式，所谓离线，就是需要dump出正在运行的java系统中的一些运行时堆栈数据，然后拿到线下来分析，分析可以包括内存，线程，GC等等，同时不会对正在运行的生产环境的机器造成很大的影响，对应着离线分析，当然是在线分析了，这个我在后面会尝试下，因为离线分析有些场景还是模拟不出来，需要借助LR来模拟压力，查看在线的java程序运行情况了。</span> </p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-size: small">首先一个简单的问题，如何dump出java运行时堆栈，这个SUN就提供了很好的工具，位于JAVA_HOME/bin目录下的jmap（java <span class="hilite1">memory</span> map之意），如果需要dump出当前运行的java进程的堆栈数据，则首先需要获得该java进程的进程ID,在linux下可以使用</span> </p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://dikar.javaeye.com/blog/643436#"><img alt="复制代码" src="http://dikar.javaeye.com/images/icon_copy.gif" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span>ps&nbsp;-aux &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>ps&nbsp;-ef&nbsp;|&nbsp;grep&nbsp;java&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="java" style="display: none" name="code">ps -aux
ps -ef | grep java
</pre>
<p>&nbsp;</p>
<p><span style="font-size: small">或者使用jdk自带的一个工具jps，例如</span> </p>
<p>&nbsp;</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://dikar.javaeye.com/blog/643436#"><img alt="复制代码" src="http://dikar.javaeye.com/images/icon_copy.gif" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span>/JAVA_HOME/bin/jps&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="java" style="display: none" name="code">/JAVA_HOME/bin/jps</pre>
<p>&nbsp;</p>
<p><span style="font-size: small">找到了当前运行的java进程的id后，就可以对正在运行的java进程使用jmap工具进行dump了，例如使用以下命令：</span> </p>
<p>&nbsp;</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://dikar.javaeye.com/blog/643436#"><img alt="复制代码" src="http://dikar.javaeye.com/images/icon_copy.gif" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span>JAVA_HOME/bin/jmap&nbsp;&nbsp;-dump:format=b,file=heap.bin&nbsp;&lt;pid&gt;&nbsp;&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="java" style="display: none" name="code">JAVA_HOME/bin/jmap  -dump:format=b,file=heap.bin &lt;pid&gt; </pre>
<p>&nbsp;</p>
<p><span style="font-size: small">其中file = heap.bin的意思是dump出的文件名叫heap.bin, 当然你可以选择你喜欢的名字，我这里选择叫*.bin是为了后面使用方便，&lt;pid&gt;表示你需要dump的java进程的id。</span> </p>
<p><span style="font-size: small"><br />
</span></p>
<p><span style="font-size: small">这里需要注意的是，记住dump的进程是java进程，不会是jboss的进程，weblogic的进程等。dump过程中机器load可能会升高，但是在我这里测试发现load升的不是特别快，同时dump时需要的磁盘空间也比较大，例如我这里测试的几个系统，分别是500M 800M 1500M&nbsp; 3000M，所以确保你运行jmap命令时所在的目录中的磁盘空间足够，当然现在的系统磁盘空间都比较大。</span> </p>
<p>&nbsp;</p>
<p><span style="font-size: small">以上是在java进程还存活的时候进行的dump，有的时候我们的java进程crash后，会生成一个core.pid文件，这个core.pid文件还不能直接被我们的java 内存分析工具使用，需要将其转换为java 内存分析工具可以读的文件（例如使用jmap工具dump出的heap.bin文件就是很多java 内存分析工具可以读的文件格式）。将core.pid文件转换为jmap工具dump出的文件格式还可以继续使用jmap工具，这个的说明可以见我前几篇中的一个转载（<a href="http://dikar.javaeye.com/blog/643196">Create Java heapdumps with the help of core dumps</a> ），这里我在补充点</span> </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://dikar.javaeye.com/blog/643436#"><img alt="复制代码" src="http://dikar.javaeye.com/images/icon_copy.gif" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span>jmap&nbsp;-heap:format=b&nbsp;[java&nbsp;binary]&nbsp;[core&nbsp;dump&nbsp;file] &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>jmap&nbsp;-dump:format=b,file=dump.hprof&nbsp;[java&nbsp;binary]&nbsp;[core&nbsp;dump&nbsp;file] &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span class="number">64</span><span>位下可以指定使用</span><span class="number">64</span><span>位模式 &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>jmap&nbsp;-d64&nbsp;&nbsp;-dump:format=b,file=dump.hprof&nbsp;[java&nbsp;binary]&nbsp;[core&nbsp;dump&nbsp;file]&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="java" style="display: none" name="code">jmap -heap:format=b [java binary] [core dump file]
jmap -dump:format=b,file=dump.hprof [java binary] [core dump file]
64位下可以指定使用64位模式
jmap -d64  -dump:format=b,file=dump.hprof [java binary] [core dump file]</pre>
&nbsp;
<p><span style="font-size: small">需要说明一下，使用jmap转换core.pid文件时，当文件格式比较大时，可能大于2G的时候就不能执行成功（我转换3G文件大小的时候没有成功）而报出</span> </p>
<p>&nbsp;</p>
<p><span style="font-size: small; color: #ff0000"><span>Error attaching to core file: Can't attach to the core file</span> </span></p>
<p>&nbsp;</p>
<p><span style="font-size: small">查过sun的bug库中，这个bug还没有被修复，我想还是由于32位下用户进程寻址大小限制在2G的范围内引起的，在64位系统和64位jdk版本中，转换3G文件应该没有什么大的问题（有机会有环境得需要测试下）。如果有兴趣分析jmap转换不成功的同学，可以使用如下命令来分析跟踪命令的执行轨迹，例如使用</span> </p>
<p>&nbsp;</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://dikar.javaeye.com/blog/643436#"><img alt="复制代码" src="http://dikar.javaeye.com/images/icon_copy.gif" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span>strace&nbsp;&nbsp;jmap&nbsp;-heap:format=b&nbsp;[java&nbsp;binary]&nbsp;[core&nbsp;dum&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="java" style="display: none" name="code">strace  jmap -heap:format=b [java binary] [core dum
</pre>
<p><span style="font-size: small">&nbsp;对于strace的命令的说明，同样可以参考我前几篇文章中的一个<a href="http://dikar.javaeye.com/blog/643201"> strace命令用法</a> </span></p>
<p><span style="font-size: small"><br />
</span></p>
<p><span style="font-size: small">同时对于core.pid文件的调试我也补充一下, 其中&gt;&gt;表示命令提示符</span> </p>
<p>&nbsp;</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://dikar.javaeye.com/blog/643436#"><img alt="复制代码" src="http://dikar.javaeye.com/images/icon_copy.gif" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span>&gt;&gt;gdb&nbsp;JAVA_HOME/bin/java&nbsp;&nbsp;core.pid &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&gt;&gt;bt&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="java" style="display: none" name="code">&gt;&gt;gdb JAVA_HOME/bin/java  core.pid
&gt;&gt;bt</pre>
&nbsp;
<p><span style="font-size: small">bt后就可以看到生成core.pid文件时，系统正在执行的一个操作，例如是哪个so文件正在执行等。</span> </p>
<p>&nbsp;</p>
<p><span style="font-size: small">好了说了这么多，上面都是怎么生成java 运行期DUMP文件的，接下来我们就进入分析阶段，为了分析这个dump出的文件，需要将这个文件弄到你的分析程序所在的机器上，例如可以是windows上，linux上，这个和你使用的分析工具以及使用的操作系统有关。不管使用什么系统，总是需要把生产环境下打出的dump文件搞到你的分析机器上，由于dump出的文件经常会比较大，例如达到2G，这么大的文件不是很好的从生产环境拉下来，因此使用FTP的方式把文件拖到分析机器上，同时由于单个文件很大，因此为了快速的将文件下载到分析机器，我们可以使用分而治之的思想，先将文件切割为小文件下载，然后在合并为一个大文件即可，还好linux提供了很方便的工具，例如使用如下命令</span> </p>
<p>&nbsp;</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://dikar.javaeye.com/blog/643436#"><img alt="复制代码" src="http://dikar.javaeye.com/images/icon_copy.gif" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span>$&nbsp;split&nbsp;-b&nbsp;300m&nbsp;heap.bin &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;$&nbsp;cat&nbsp;x*&nbsp;&gt;&nbsp;heap.bin&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="java" style="display: none" name="code">$ split -b 300m heap.bin
$ cat x* &gt; heap.bin
</pre>
<p style="text-indent: 2em"><span style="font-size: small"><br />
</span></p>
<p style="text-indent: 2em"><span style="font-size: small">在上面的 split 命令行中的 &#8220;300m&#8221; 表示分割后的每个文件为 300MB，&#8220;heap.bin&#8221; 为待分割的dump文件，分割后的文件自动命名为 xaa，xab，xac等 <br />
<br />
cat 命令可将这些分割后的文件合并为一个文件，例如将所有x开头的文件合并为heap.bin</span> </p>
<p>&nbsp;</p>
<p><span style="font-size: small">如果我们是利用一个中间层的FTP服务器来保存数据的，那么我们还需要连接这个FTP服务器把合并后的文件拉下来，在windows下我推荐使用一个工具，速度很快而且简单，</span> </p>
<p><span style="font-size: small; color: #0000ff">winscp</span> <span style="font-size: small">&nbsp; <span style="background-color: #008000">http://winscp.net/eng/docs/lang:chs</span> </span></p>
<p><span style="font-size: small"><br />
</span></p>
<p><span style="font-size: small">好了分析的文件终于经过一翻周折到了你的分析机器上，现在我们就可以使用分析工具来分析这个dump出的程序了，这里我主要是分析内存的问题，所以我说下我选择的内存分析工具，我这里使用的是开源的由SAP 和IBM 支持的一个内存分析工具 </span></p>
<h1><span class="hilite1">Memory</span> Analyzer (MAT) </h1>
<p>http://www.eclipse.org/mat/</p>
<p>&nbsp;</p>
<p><span style="font-size: small">我建议下载 Stand-alone Eclipse RCP 版本，不要装成eclipse的插件，因为这个分析起来还是很耗内存。</span> <strong></strong></p>
<p>&nbsp;</p>
<p><span style="font-size: small">下载好了，解压开来就可以直接使用了（基于eclipse的），打开以后，在菜单栏中选择打开文件，选择你刚刚的dump文件，然后一路的next就可以了，最后你会看到一个报告，这个报告里会告诉你可能的内存泄露的点，以及内存中对象的一个分布，关于mat的使用请参考官方说明，当然你也可以自己徜徉在学习的海洋中</span> 。</p>
<p>&nbsp;</p>
<p><span style="font-size: small">对于dump文件的分析还可以使用jdk中提供的一个jhat工具来查看，不过这个很耗内存，而且默认的内存大小不够，还需要增加参数设置内存大小才能分析出，不过我看了下分析出的结果不是很满意，而且这个用起来很慢。还是推荐使用mat</span> 。</p>
</div>
<img src ="http://www.blogjava.net/willpower88/aggbug/320254.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2010-05-07 10:31 <a href="http://www.blogjava.net/willpower88/archive/2010/05/07/320254.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JVM内存模型以及垃圾回收</title><link>http://www.blogjava.net/willpower88/archive/2010/05/04/319988.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Tue, 04 May 2010 01:29:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2010/05/04/319988.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/319988.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2010/05/04/319988.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/319988.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/319988.html</trackback:ping><description><![CDATA[<p>JVM内存模型以及垃圾回收<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;摘自：http://hi.baidu.com/xuwanbest/blog/item/0587d82f2c44a73d1e30892e.html&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
JAVA堆的描述如下：<br />
<br />
<img height="278" alt="" src="http://www.blogjava.net/images/blogjava_net/willpower88/19331/o_78ed574ed8706f05b3de058a.png" width="548" border="0" /><br />
<br />
内存由 Perm 和 Heap 组成. 其中</p>
<p>Heap = {Old + NEW = { Eden , from, to } }</p>
<p>JVM内存模型中分两大块，一块是 NEW Generation, 另一块是Old Generation. 在New Generation中，有一个叫Eden的空间，主要是用来存放新生的对象，还有两个Survivor Spaces（from,to）, 它们用来存放每次垃圾回收后存活下来的对象。在Old Generation中，主要存放应用程序中生命周期长的内存对象，还有个Permanent Generation，主要用来放JVM自己的反射对象，比如类对象和方法对象等。<br />
垃圾回收描述：</p>
<p><br />
在New Generation块中，垃圾回收一般用Copying的算法，速度快。每次GC的时候，存活下来的对象首先由Eden拷贝到某个Survivor Space, 当Survivor Space空间满了后, 剩下的live对象就被直接拷贝到Old Generation中去。因此，每次GC后，Eden内存块会被清空。在Old Generation块中，垃圾回收一般用mark-compact的算法，速度慢些，但减少内存要求.<br />
垃圾回收分多级，0级为全部(Full)的垃圾回收，会回收OLD段中的垃圾；1级或以上为部分垃圾回收，只会回收NEW中的垃圾，内存溢出通常发生于OLD段或Perm段垃圾回收后，仍然无内存空间容纳新的Java对象的情况。</p>
<p>当一个URL被访问时，内存申请过程如下：<br />
A. JVM会试图为相关Java对象在Eden中初始化一块内存区域<br />
B. 当Eden空间足够时，内存申请结束。否则到下一步<br />
C. JVM试图释放在Eden中所有不活跃的对象（这属于1或更高级的垃圾回收）, 释放后若Eden空间仍然不足以放入新对象，则试图将部分Eden中活跃对象放入Survivor区<br />
D. Survivor区被用来作为Eden及OLD的中间交换区域，当OLD区空间足够时，Survivor区的对象会被移到Old区，否则会被保留在Survivor区<br />
E. 当OLD区空间不够时，JVM会在OLD区进行完全的垃圾收集（0级）<br />
F. 完全垃圾收集后，若Survivor及OLD区仍然无法存放从Eden复制过来的部分对象，导致JVM无法在Eden区为新对象创建内存区域，则出现&#8221;out of memory错误&#8221;</p>
<p>JVM调优建议:</p>
<p>ms/mx：定义YOUNG+OLD段的总尺寸，ms为JVM启动时YOUNG+OLD的内存大小；mx为最大可占用的YOUNG+OLD内存大小。在用户生产环境上一般将这两个值设为相同，以减少运行期间系统在内存申请上所花的开销。<br />
NewSize/MaxNewSize：定义YOUNG段的尺寸，NewSize为JVM启动时YOUNG的内存大小；MaxNewSize为最大可占用的YOUNG内存大小。在用户生产环境上一般将这两个值设为相同，以减少运行期间系统在内存申请上所花的开销。<br />
PermSize/MaxPermSize：定义Perm段的尺寸，PermSize为JVM启动时Perm的内存大小；MaxPermSize为最大可占用的Perm内存大小。在用户生产环境上一般将这两个值设为相同，以减少运行期间系统在内存申请上所花的开销。<br />
SurvivorRatio：设置Survivor空间和Eden空间的比例</p>
<p>内存溢出的可能性</p>
<p>1. OLD段溢出<br />
这种内存溢出是最常见的情况之一，产生的原因可能是：<br />
1) 设置的内存参数过小(ms/mx, NewSize/MaxNewSize)<br />
2) 程序问题<br />
单个程序持续进行消耗内存的处理，如循环几千次的字符串处理，对字符串处理应建议使用StringBuffer。此时不会报内存溢出错，却会使系统持续垃圾收集，无法处理其它请求，相关问题程序可通过Thread Dump获取（见系统问题诊断一章）单个程序所申请内存过大，有的程序会申请几十乃至几百兆内存，此时JVM也会因无法申请到资源而出现内存溢出，对此首先要找到相关功能，然后交予程序员修改，要找到相关程序，必须在Apache日志中寻找。<br />
当Java对象使用完毕后，其所引用的对象却没有销毁，使得JVM认为他还是活跃的对象而不进行回收，这样累计占用了大量内存而无法释放。由于目前市面上还没有对系统影响小的内存分析工具，故此时只能和程序员一起定位。</p>
<p><br />
2. Perm段溢出<br />
通常由于Perm段装载了大量的Servlet类而导致溢出，目前的解决办法：<br />
1) 将PermSize扩大，一般256M能够满足要求<br />
2) 若别无选择，则只能将servlet的路径加到CLASSPATH中，但一般不建议这么处理</p>
<p>3. C Heap溢出<br />
系统对C Heap没有限制，故C Heap发生问题时，Java进程所占内存会持续增长，直到占用所有可用系统内存</p>
<p>其他：</p>
<p>JVM有2个GC线程。第一个线程负责回收Heap的Young区。第二个线程在Heap不足时，遍历Heap，将Young 区升级为Older区。Older区的大小等于-Xmx减去-Xmn，不能将-Xms的值设的过大，因为第二个线程被迫运行会降低JVM的性能。<br />
为什么一些程序频繁发生GC？有如下原因：l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 程序内调用了System.gc()或Runtime.gc()。l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一些中间件软件调用自己的GC方法，此时需要设置参数禁止这些GC。l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Java的Heap太小，一般默认的Heap值都很小。l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 频繁实例化对象，Release对象。此时尽量保存并重用对象，例如使用StringBuffer()和String()。如果你发现每次GC后，Heap的剩余空间会是总空间的50%，这表示你的Heap处于健康状态。许多Server端的Java程序每次GC后最好能有65%的剩余空间。经验之谈：1．Server端JVM最好将-Xms和-Xmx设为相同值。为了优化GC，最好让-Xmn值约等于-Xmx的1/3[2]。2．一个GUI程序最好是每10到20秒间运行一次GC，每次在半秒之内完成[2]。注意：1．增加Heap的大小虽然会降低GC的频率，但也增加了每次GC的时间。并且GC运行时，所有的用户线程将暂停，也就是GC期间，Java应用程序不做任何工作。2．Heap大小并不决定进程的内存使用量。进程的内存使用量要大于-Xmx定义的值，因为Java为其他任务分配内存，例如每个线程的Stack等。2．Stack的设定每个线程都有他自己的Stack。<br />
-Xss 每个线程的Stack大小 </p>
<p><br />
Stack的大小限制着线程的数量。如果Stack过大就好导致内存溢漏。-Xss参数决定Stack大小，例如-Xss1024K。如果Stack太小，也会导致Stack溢漏。3．硬件环境硬件环境也影响GC的效率，例如机器的种类，内存，swap空间，和CPU的数量。如果你的程序需要频繁创建很多transient对象，会导致JVM频繁GC。这种情况你可以增加机器的内存，来减少Swap空间的使用[2]。4．4种GC第一种为单线程GC，也是默认的GC。，该GC适用于单CPU机器。第二种为Throughput GC，是多线程的GC，适用于多CPU，使用大量线程的程序。第二种GC与第一种GC相似，不同在于GC在收集Young区是多线程的，但在Old区和第一种一样，仍然采用单线程。-XX:+UseParallelGC参数启动该GC。第三种为Concurrent Low Pause GC，类似于第一种，适用于多CPU，并要求缩短因GC造成程序停滞的时间。这种GC可以在Old区的回收同时，运行应用程序。-XX:+UseConcMarkSweepGC参数启动该GC。第四种为Incremental Low Pause GC，适用于要求缩短因GC造成程序停滞的时间。这种GC可以在Young区回收的同时，回收一部分Old区对象。-Xincgc参数启动该GC。 <br />
</p>
<img src ="http://www.blogjava.net/willpower88/aggbug/319988.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2010-05-04 09:29 <a href="http://www.blogjava.net/willpower88/archive/2010/05/04/319988.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用java reflct检查javabean是否有空值</title><link>http://www.blogjava.net/willpower88/archive/2009/06/16/282608.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Tue, 16 Jun 2009 07:35:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2009/06/16/282608.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/282608.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2009/06/16/282608.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/282608.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/282608.html</trackback:ping><description><![CDATA[<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.lang.reflect.InvocationTargetException;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.lang.reflect.Method;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.commons.lang.StringUtils;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;com.sun.org.apache.commons.beanutils.PropertyUtils;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img id="Codehighlighter1_227_260_Open_Image" onclick="this.style.display='none'; Codehighlighter1_227_260_Open_Text.style.display='none'; Codehighlighter1_227_260_Closed_Image.style.display='inline'; Codehighlighter1_227_260_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_227_260_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_227_260_Closed_Text.style.display='none'; Codehighlighter1_227_260_Open_Image.style.display='inline'; Codehighlighter1_227_260_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_227_260_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_227_260_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;create_date&nbsp;:&nbsp;2009-6-16<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_284_1364_Open_Image" onclick="this.style.display='none'; Codehighlighter1_284_1364_Open_Text.style.display='none'; Codehighlighter1_284_1364_Closed_Image.style.display='inline'; Codehighlighter1_284_1364_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_284_1364_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_284_1364_Closed_Text.style.display='none'; Codehighlighter1_284_1364_Open_Image.style.display='inline'; Codehighlighter1_284_1364_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TestBean&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_284_1364_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_284_1364_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;uid;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;uname;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;sex;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img id="Codehighlighter1_377_394_Open_Image" onclick="this.style.display='none'; Codehighlighter1_377_394_Open_Text.style.display='none'; Codehighlighter1_377_394_Closed_Image.style.display='inline'; Codehighlighter1_377_394_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_377_394_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_377_394_Closed_Text.style.display='none'; Codehighlighter1_377_394_Open_Image.style.display='inline'; Codehighlighter1_377_394_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getUid()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_377_394_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_377_394_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;uid;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img id="Codehighlighter1_429_450_Open_Image" onclick="this.style.display='none'; Codehighlighter1_429_450_Open_Text.style.display='none'; Codehighlighter1_429_450_Closed_Image.style.display='inline'; Codehighlighter1_429_450_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_429_450_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_429_450_Closed_Text.style.display='none'; Codehighlighter1_429_450_Open_Image.style.display='inline'; Codehighlighter1_429_450_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setUid(String&nbsp;uid)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_429_450_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_429_450_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.uid&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;uid;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img id="Codehighlighter1_479_498_Open_Image" onclick="this.style.display='none'; Codehighlighter1_479_498_Open_Text.style.display='none'; Codehighlighter1_479_498_Closed_Image.style.display='inline'; Codehighlighter1_479_498_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_479_498_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_479_498_Closed_Text.style.display='none'; Codehighlighter1_479_498_Open_Image.style.display='inline'; Codehighlighter1_479_498_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getUname()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_479_498_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_479_498_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;uname;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img id="Codehighlighter1_537_562_Open_Image" onclick="this.style.display='none'; Codehighlighter1_537_562_Open_Text.style.display='none'; Codehighlighter1_537_562_Closed_Image.style.display='inline'; Codehighlighter1_537_562_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_537_562_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_537_562_Closed_Text.style.display='none'; Codehighlighter1_537_562_Open_Image.style.display='inline'; Codehighlighter1_537_562_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setUname(String&nbsp;uname)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_537_562_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_537_562_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.uname&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;uname;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img id="Codehighlighter1_589_606_Open_Image" onclick="this.style.display='none'; Codehighlighter1_589_606_Open_Text.style.display='none'; Codehighlighter1_589_606_Closed_Image.style.display='inline'; Codehighlighter1_589_606_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_589_606_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_589_606_Closed_Text.style.display='none'; Codehighlighter1_589_606_Open_Image.style.display='inline'; Codehighlighter1_589_606_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getSex()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_589_606_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_589_606_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;sex;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img id="Codehighlighter1_641_662_Open_Image" onclick="this.style.display='none'; Codehighlighter1_641_662_Open_Text.style.display='none'; Codehighlighter1_641_662_Closed_Image.style.display='inline'; Codehighlighter1_641_662_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_641_662_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_641_662_Closed_Text.style.display='none'; Codehighlighter1_641_662_Open_Image.style.display='inline'; Codehighlighter1_641_662_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setSex(String&nbsp;sex)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_641_662_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_641_662_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.sex&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;sex;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img id="Codehighlighter1_688_1219_Open_Image" onclick="this.style.display='none'; Codehighlighter1_688_1219_Open_Text.style.display='none'; Codehighlighter1_688_1219_Closed_Image.style.display='inline'; Codehighlighter1_688_1219_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_688_1219_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_688_1219_Closed_Text.style.display='none'; Codehighlighter1_688_1219_Open_Image.style.display='inline'; Codehighlighter1_688_1219_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;check()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_688_1219_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_688_1219_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method[]&nbsp;methods&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.getClass().getMethods();<br />
<img id="Codehighlighter1_784_1201_Open_Image" onclick="this.style.display='none'; Codehighlighter1_784_1201_Open_Text.style.display='none'; Codehighlighter1_784_1201_Closed_Image.style.display='inline'; Codehighlighter1_784_1201_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_784_1201_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_784_1201_Closed_Text.style.display='none'; Codehighlighter1_784_1201_Open_Image.style.display='inline'; Codehighlighter1_784_1201_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;methods.length;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_784_1201_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_784_1201_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;method&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;methods[i];<br />
<img id="Codehighlighter1_860_1197_Open_Image" onclick="this.style.display='none'; Codehighlighter1_860_1197_Open_Text.style.display='none'; Codehighlighter1_860_1197_Closed_Image.style.display='inline'; Codehighlighter1_860_1197_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_860_1197_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_860_1197_Closed_Text.style.display='none'; Codehighlighter1_860_1197_Open_Image.style.display='inline'; Codehighlighter1_860_1197_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(method.getName().startsWith(</span><span style="color: #000000">"</span><span style="color: #000000">get</span><span style="color: #000000">"</span><span style="color: #000000">))&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_860_1197_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_860_1197_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_870_986_Open_Image" onclick="this.style.display='none'; Codehighlighter1_870_986_Open_Text.style.display='none'; Codehighlighter1_870_986_Closed_Image.style.display='inline'; Codehighlighter1_870_986_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_870_986_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_870_986_Closed_Text.style.display='none'; Codehighlighter1_870_986_Open_Image.style.display='inline'; Codehighlighter1_870_986_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_870_986_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_870_986_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_929_980_Open_Image" onclick="this.style.display='none'; Codehighlighter1_929_980_Open_Text.style.display='none'; Codehighlighter1_929_980_Closed_Image.style.display='inline'; Codehighlighter1_929_980_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_929_980_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_929_980_Closed_Text.style.display='none'; Codehighlighter1_929_980_Open_Image.style.display='inline'; Codehighlighter1_929_980_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(StringUtils.isBlank((String)method.invoke(</span><span style="color: #0000ff">this</span><span style="color: #000000">)))</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_929_980_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_929_980_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;method.getName().substring(</span><span style="color: #000000">3</span><span style="color: #000000">);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_1023_1055_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1023_1055_Open_Text.style.display='none'; Codehighlighter1_1023_1055_Closed_Image.style.display='inline'; Codehighlighter1_1023_1055_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_1023_1055_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1023_1055_Closed_Text.style.display='none'; Codehighlighter1_1023_1055_Open_Image.style.display='inline'; Codehighlighter1_1023_1055_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(IllegalArgumentException&nbsp;e)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1023_1055_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1023_1055_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
<img id="Codehighlighter1_1090_1122_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1090_1122_Open_Text.style.display='none'; Codehighlighter1_1090_1122_Closed_Image.style.display='inline'; Codehighlighter1_1090_1122_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_1090_1122_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1090_1122_Closed_Text.style.display='none'; Codehighlighter1_1090_1122_Open_Image.style.display='inline'; Codehighlighter1_1090_1122_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(IllegalAccessException&nbsp;e)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1090_1122_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1090_1122_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
<img id="Codehighlighter1_1160_1192_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1160_1192_Open_Text.style.display='none'; Codehighlighter1_1160_1192_Closed_Image.style.display='inline'; Codehighlighter1_1160_1192_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_1160_1192_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1160_1192_Closed_Text.style.display='none'; Codehighlighter1_1160_1192_Open_Image.style.display='inline'; Codehighlighter1_1160_1192_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(InvocationTargetException&nbsp;e)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1160_1192_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1160_1192_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_1263_1362_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1263_1362_Open_Text.style.display='none'; Codehighlighter1_1263_1362_Closed_Image.style.display='inline'; Codehighlighter1_1263_1362_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_1263_1362_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1263_1362_Closed_Text.style.display='none'; Codehighlighter1_1263_1362_Open_Image.style.display='inline'; Codehighlighter1_1263_1362_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1263_1362_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1263_1362_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestBean&nbsp;tBean&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;TestBean();<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tBean.setUid(</span><span style="color: #000000">"</span><span style="color: #000000">1234</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(tBean.check());<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div>
<img src ="http://www.blogjava.net/willpower88/aggbug/282608.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2009-06-16 15:35 <a href="http://www.blogjava.net/willpower88/archive/2009/06/16/282608.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA中的内存分配</title><link>http://www.blogjava.net/willpower88/archive/2008/05/07/198871.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Wed, 07 May 2008 01:44:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2008/05/07/198871.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/198871.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2008/05/07/198871.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/198871.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/198871.html</trackback:ping><description><![CDATA[&nbsp;&nbsp; <br />
&nbsp;&nbsp; 　转自<a href="http://blog.csdn.net/shengbox/archive/2007/09/18/1789647.aspx">http://blog.csdn.net/shengbox/archive/2007/09/18/1789647.aspx </a><br />
&nbsp;&nbsp; 照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的.<br />
&nbsp;&nbsp;&nbsp;静态存储分配是指在编译时就能确定
每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们分配固定的内存空间.这种分配策略要求程序代码中不允许有可变数据结构(比如可变数组)
的存在,也不允许有嵌套或者递归的结构出现,因为它们都会导致编译程序无法计算准确的存储空间需求.<br />
&nbsp;&nbsp;&nbsp;栈式存储分配也可称为动态存储分配,是
由一个类似于堆栈的运行栈来实现的.和静态存储分配相反,在栈式存储方案中,程序对数据区的需求在编译时是完全未知的,只有到运行的时候才能够知道,但是
规定在运行中进入一个程序模块时,必须知道该程序模块所需的数据区大小才能够为其分配内存.和我们在数据结构所熟知的栈一样,栈式存储分配按照先进后出的
原则进行分配。<br />
&nbsp;&nbsp;&nbsp;静态存储分配要求在编译时能知道所有变量的存储要求,栈式存储分配要求在过程的入口处必须知道所有的存储要求,而堆式存储分
配则专门负责在编译时或运行时模块入口处都无法确定存储要求的数据结构的内存分配,比如可变长度串和对象实例.堆由大片的可利用块或空闲块组成,堆中的内
存可以按照任意顺序分配和释放.&nbsp;<br />
&nbsp;堆和栈的比较<br />
&nbsp;&nbsp;上面的定义从编译原理的教材中总结而来,除静态存储分配之外,都显得很呆板和难以理解,下面撇开静态存储分配,集中比较堆和栈:<br />
&nbsp;&nbsp;&nbsp;从堆和栈的功能和作用来通俗的比较,堆主要用来存放对象的，栈主要是用来执行程序的.而这种不同又主要是由于堆和栈的特点决定的:<br />
&nbsp;&nbsp;&nbsp;
在编程中，例如C/C++中，所有的方法调用都是通过栈来进行的,所有的局部变量,形式参数都是从栈中分配内存空间的。实际上也不是什么分配,只是从栈顶
向上用就行,就好像工厂中的传送带(conveyor&nbsp;belt)一样,Stack&nbsp;Pointer会自动指引你到放东西的位置,你所要做的只是把东西放
下来就行.退出函数的时候，修改栈指针就可以把栈中的内容销毁.这样的模式速度最快,当然要用来运行程序了.需要注意的是,在分配的时候,比如为一个即将
要调用的程序模块分配数据区时,应事先知道这个数据区的大小,也就说是虽然分配是在程序运行时进行的,但是分配的大小多少是确定的,不变的,而这个"大小
多少"是在编译时确定的,不是在运行时.<br />
&nbsp;&nbsp;&nbsp;堆是应用程序在运行的时候请求操作系统分配给自己内存，由于从操作系统管理的内存分配,所以在分配
和销毁时都要占用时间，因此用堆的效率非常低.但是堆的优点在于,编译器不必知道要从堆里分配多少存储空间，也不必知道存储的数据要在堆里停留多长的时
间,因此,用堆保存数据时会得到更大的灵活性。事实上,面向对象的多态性,堆内存分配是必不可少的,因为多态变量所需的存储空间只有在运行时创建了对象之
后才能确定.在C++中，要求创建一个对象时，只需用new命令编制相关的代码即可。执行这些代码时，会在堆里自动进行数据的保存.当然，为达到这种灵活
性，必然会付出一定的代价:在堆里分配存储空间时会花掉更长的时间！这也正是导致我们刚才所说的效率低的原因,看来列宁同志说的好,人的优点往往也是人的
缺点,人的缺点往往也是人的优点(晕~).&nbsp;<br />
<br />
&nbsp;JVM中的堆和栈&nbsp;&nbsp;<br />
&nbsp;&nbsp;JVM是基于堆栈的虚拟机.JVM为每个新创建的线程都分配一个堆栈.也就是说,对于一个Java程序来说，它的运行就是通过对堆栈的操作来完成的。堆栈以帧为单位保存线程的状态。JVM对堆栈只进行两种操作:以帧为单位的压栈和出栈操作。<br />
&nbsp;&nbsp;
我们知道,某个线程正在执行的方法称为此线程的当前方法.我们可能不知道,当前方法使用的帧称为当前帧。当线程激活一个Java方法,JVM就会在线程的
Java堆栈里新压入一个帧。这个帧自然成为了当前帧.在此方法执行期间,这个帧将用来保存参数,局部变量,中间计算过程和其他数据.这个帧在这里和编译
原理中的活动纪录的概念是差不多的.<br />
&nbsp;&nbsp;从Java的这种分配机制来看,堆栈又可以这样理解:堆栈(Stack)是操作系统在建立某个进程时或者线程(在支持多线程的操作系统中是线程)为这个线程建立的存储区域，该区域具有先进后出的特性。<br />
&nbsp;&nbsp;&nbsp;
每一个Java应用都唯一对应一个JVM实例，每一个实例唯一对应一个堆。应用程序在运行中所创建的所有类实例或数组都放在这个堆中,并由应用所有的线程
共享.跟C/C++不同，Java中分配堆内存是自动初始化的。Java中所有对象的存储空间都是在堆中分配的，但是这个对象的引用却是在堆栈中分配,也
就是说在建立一个对象时从两个地方都分配内存，在堆中分配的内存实际建立这个对象，而在堆栈中分配的内存只是一个指向这个堆对象的指针(引用)而已。<br />
GC的思考<br />
&nbsp;&nbsp;&nbsp;Java为什么慢?JVM的存在当然是一个原因,但有人说,在Java中,除了简单类型(int,char等)的数据结构,其它都是在堆中分配内存(所以说Java的一切都是对象)，这也是程序慢的原因之一。<br />
&nbsp;&nbsp;&nbsp;
我的想法是(应该说代表TIJ的观点),如果没有Garbage&nbsp;Collector(GC),上面的说法就是成立的.堆不象栈是连续的空间,没有办法指
望堆本身的内存分配能够象堆栈一样拥有传送带般的速度,因为,谁会为你整理庞大的堆空间,让你几乎没有延迟的从堆中获取新的空间呢?<br />
&nbsp;&nbsp;&nbsp;这个时
候,GC站出来解决问题.我们都知道GC用来清除内存垃圾,为堆腾出空间供程序使用,但GC同时也担负了另外一个重要的任务,就是要让Java中堆的内存
分配和其他语言中堆栈的内存分配一样快,因为速度的问题几乎是众口一词的对Java的诟病.要达到这样的目的,就必须使堆的分配也能够做到象传送带一样,
不用自己操心去找空闲空间.这样,GC除了负责清除Garbage外,还要负责整理堆中的对象,把它们转移到一个远离Garbage的纯净空间中无间隔的
排列起来,就象堆栈中一样紧凑,这样Heap&nbsp;Pointer就可以方便的指向传送带的起始位置,或者说一个未使用的空间,为下一个需要分配内存的对象"
指引方向".因此可以这样说,垃圾收集影响了对象的创建速度,听起来很怪,对不对?<br />
&nbsp;&nbsp;&nbsp;那GC怎样在堆中找到所有存活的对象呢?前面说了,在建
立一个对象时，在堆中分配实际建立这个对象的内存,而在堆栈中分配一个指向这个堆对象的指针(引用),那么只要在堆栈(也有可能在静态存储区)找到这个引
用,就可以跟踪到所有存活的对象.找到之后,GC将它们从一个堆的块中移到另外一个堆的块中,并将它们一个挨一个的排列起来,就象我们上面说的那样,模拟
出了一个栈的结构,但又不是先进后出的分配,而是可以任意分配的,在速度可以保证的情况下,Isn't&nbsp;it&nbsp;great?<br />
&nbsp;&nbsp;&nbsp;但是，列宁同志
说了,人的优点往往也是人的缺点,人的缺点往往也是人的优点(再晕~~).GC()的运行要占用一个线程,这本身就是一个降低程序运行性能的缺陷,更何况
这个线程还要在堆中把内存翻来覆去的折腾.不仅如此,如上面所说,堆中存活的对象被搬移了位置,那么所有对这些对象的引用都要重新赋值.这些开销都会导致
性能的降低.<br />
&nbsp;&nbsp;&nbsp;此消彼长,GC()的优点带来的效益是否盖过了它的缺点导致的损失,我也没有太多的体会,Bruce&nbsp;Eckel&nbsp;是Java的支持者，王婆卖瓜，话不能全信.个人总的感觉是,Java还是很慢,它的发展还需要时间.<br />
&nbsp;&nbsp;上面的体会是我看了TIJ.3rdEdition.Revision4.0中第四章之后得出的,内容和前面的有些不同.我没有看过侯捷的中文版本,但我觉得,在关键问题上,原版的TIJ的确更值得一读.所以和中文版配合起来学习是比较不错的选择.<br />
&nbsp;&nbsp;
我只能算一个Java的初学者,没想到起了这么个题目,却受到这么多人的关注,欣喜之余,也决心尽力写好下面的每一篇.不过这一篇完了,我就该准备赴美签
证了,如果成功,那就要等到8月27号CS的研究生院开学之后,才有时间会开始研究下一章了,希望可以多从原版中获取一点经验.&nbsp;
<img src ="http://www.blogjava.net/willpower88/aggbug/198871.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2008-05-07 09:44 <a href="http://www.blogjava.net/willpower88/archive/2008/05/07/198871.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java发送HTTP GET POST请求</title><link>http://www.blogjava.net/willpower88/archive/2008/04/14/192720.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Mon, 14 Apr 2008 04:00:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2008/04/14/192720.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/192720.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2008/04/14/192720.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/192720.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/192720.html</trackback:ping><description><![CDATA[１、发送源码<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.io.BufferedReader;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.io.BufferedWriter;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.io.File;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.io.FileReader;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.io.IOException;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.io.OutputStream;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.io.OutputStreamWriter;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.net.HttpURLConnection;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.net.URL;<br />
<br />
<br />
<br />
</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;*&nbsp;通过HTTP上传文件<br />
&nbsp;*&nbsp;</span><span style="color: #808080;">@author</span><span style="color: #008000;">&nbsp;cnyqaio@hotmail.com<br />
&nbsp;*&nbsp;@create&nbsp;2008-4-14<br />
&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
<br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;PostUrl&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;HttpURLConnection&nbsp;conn&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;BufferedWriter&nbsp;bWriter&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;OutputStream&nbsp;os&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;OutputStreamWriter&nbsp;osw&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;FileReader&nbsp;fr&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;BufferedReader&nbsp;br&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;str&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">""</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;c&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">\n</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;filename&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">d:/shchinamobile.log</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;通过HTTP协议以POST形式发送指定文件至指定url<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080;">@param</span><span style="color: #008000;">&nbsp;url<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080;">@throws</span><span style="color: #008000;">&nbsp;IOException<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;sendPost(String&nbsp;url)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;f&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;File(filename);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URL&nbsp;url1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;URL(url);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(HttpURLConnection)url1.openConnection();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.setRequestMethod(</span><span style="color: #000000;">"</span><span style="color: #000000;">POST</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.setRequestProperty(</span><span style="color: #000000;">"</span><span style="color: #000000;">Content-Type</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">application/x-www-form-urlencoded</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.setRequestProperty(</span><span style="color: #000000;">"</span><span style="color: #000000;">Connection</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">Keep-Alive</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.setUseCaches(&nbsp;</span><span style="color: #0000ff;">false</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.setDoOutput(</span><span style="color: #0000ff;">true</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osw&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;OutputStreamWriter(conn.getOutputStream());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fr&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;FileReader(f);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;br&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;BufferedReader(fr);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">((str&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;br.readLine())&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osw.write(str);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osw.write(c);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osw.flush()&nbsp;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osw.close()&nbsp;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(conn.getResponseCode()&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;HttpURLConnection.HTTP_OK)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">connect&nbsp;failed!</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(IOException&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(System.out);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">finally</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(osw&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osw.close()&nbsp;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(IOException&nbsp;e1)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e1.printStackTrace(System.out);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(conn&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.disconnect()&nbsp;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PostUrl&nbsp;pu&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;PostUrl();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pu.sendPost(</span><span style="color: #000000;">"</span><span style="color: #000000;">http://127.0.0.1:8080/testjava/testp.jsp</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(Exception&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<br />
２、接收JSP<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&lt;%</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.err.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">This&nbsp;a&nbsp;struts&nbsp;page.</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">接收上传的文件内容的临时文件的文件名</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;tempFileName</span><span style="color: #000000;">=</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;String(</span><span style="color: #000000;">"</span><span style="color: #000000;">tempFileName1</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">tempFile1对象指向这个临时文件</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;tempFile1</span><span style="color: #000000;">=</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;File(</span><span style="color: #000000;">"</span><span style="color: #000000;">D:/</span><span style="color: #000000;">"</span><span style="color: #000000;">,tempFileName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">outputFile1文件输出流指向这个临时文件</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileOutputStream&nbsp;outputFile1</span><span style="color: #000000;">=</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;FileOutputStream(tempFile1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">得到客户端提交的所有数据</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;fileSource1</span><span style="color: #000000;">=</span><span style="color: #000000;">request.getInputStream();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">将得到的客户端的数据写入临时文件</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">byte</span><span style="color: #000000;">&nbsp;b[]</span><span style="color: #000000;">=</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">byte</span><span style="color: #000000;">[</span><span style="color: #000000;">1000</span><span style="color: #000000;">];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">((n</span><span style="color: #000000;">=</span><span style="color: #000000;">fileSource1.read(b))</span><span style="color: #000000;">!=-</span><span style="color: #000000;">1</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outputFile1.write(b,</span><span style="color: #000000;">0</span><span style="color: #000000;">,n);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">关闭输出流和输入流</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outputFile1.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileSource1.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">%&gt;</span><span style="color: #000000;"><br />
</span></div>
<br />
已测试通过<br />
<br />
还可以通HttpClient来发送，请参照：<a href="http://www.blogjava.net/willpower88/archive/2008/04/14/192679.html">http://www.blogjava.net/willpower88/archive/2008/04/14/192679.html</a><br />
<img src ="http://www.blogjava.net/willpower88/aggbug/192720.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2008-04-14 12:00 <a href="http://www.blogjava.net/willpower88/archive/2008/04/14/192720.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>static变量在JAVA多线程程序中</title><link>http://www.blogjava.net/willpower88/archive/2008/03/07/184509.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Fri, 07 Mar 2008 06:30:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2008/03/07/184509.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/184509.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2008/03/07/184509.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/184509.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/184509.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 在一个群发程序中，我用了static的变量rs，在多线程下总出现rs用尽的情况，昨天才被同事发现这个毛病，所以在这里告戒大家同时也加强我的记忆，在写多线程程序时要注意static变量的使用。<br />
<img src ="http://www.blogjava.net/willpower88/aggbug/184509.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2008-03-07 14:30 <a href="http://www.blogjava.net/willpower88/archive/2008/03/07/184509.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java读写Excel</title><link>http://www.blogjava.net/willpower88/archive/2008/01/21/176788.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Mon, 21 Jan 2008 08:37:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2008/01/21/176788.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/176788.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2008/01/21/176788.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/176788.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/176788.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 通过<a href="http://sourceforge.net/project/showfiles.php?group_id=79926&amp;package_id=81471">jxl.jar</a>读写Excel:<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">package</span><span style="color: #000000;">&nbsp;com.pub.util;<br />
<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.io.File;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.io.IOException;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.util.Vector;<br />
<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;jxl.Sheet;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;jxl.Workbook;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;jxl.read.biff.BiffException;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;jxl.write.Label;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;jxl.write.WritableSheet;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;jxl.write.WritableWorkbook;<br />
<br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;ExlUtil&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;Vector&nbsp;readExl(String&nbsp;fileName)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Vector&nbsp;vec1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Vector&nbsp;vec2&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Vector();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;f&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;File(fileName);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;构建Workbook对象,&nbsp;只读Workbook对象</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Workbook&nbsp;workbook&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Workbook.getWorkbook(f);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;获取第一张Sheet表</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sheet&nbsp;sheet&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;workbook.getSheet(</span><span style="color: #000000;">0</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;获取行数</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;rows&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sheet.getRows();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;获取列数</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;columns&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sheet.getColumns();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;rows;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Vector();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;j&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;j&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;columns;&nbsp;j</span><span style="color: #000000;">++</span><span style="color: #000000;">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;获取j列i行的值</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;cbxmdm&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sheet.getCell(j,&nbsp;i).getContents();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(cbxmdm&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)<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;cbxmdm&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">""</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec1.add(cbxmdm);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(vec1&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec2.add(vec1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(BiffException&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(IOException&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;vec2;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;writeExl(String&nbsp;fileName,&nbsp;Vector&nbsp;vec)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WritableWorkbook&nbsp;book&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WritableSheet&nbsp;sheet&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;book&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Workbook.createWorkbook(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;File(fileName));<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;生成名为&#8220;第一页&#8221;的工作表，参数0表示这是第一页</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sheet&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;book.createSheet(</span><span style="color: #000000;">"</span><span style="color: #000000;">第一页</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;打开文件</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;vec.size();&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;在Label对象的构造子中指名单元格位置是第一列第一行(0,0)</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Vector&nbsp;vec2&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(Vector)&nbsp;vec.get(i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;j&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;j&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;vec2.size();&nbsp;j</span><span style="color: #000000;">++</span><span style="color: #000000;">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;第i行第j列</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Label&nbsp;label&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Label(j,&nbsp;i,&nbsp;(String)&nbsp;vec2.get(j));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;将定义好的单元格添加到工作表中</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sheet.addCell(label);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;写入数据并关闭文件</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;book.write();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;book.close();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(Exception&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExlUtil.writeExl(</span><span style="color: #000000;">"</span><span style="color: #000000;">f:/new.xls</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;ExlUtil.readExl(</span><span style="color: #000000;">"</span><span style="color: #000000;">f:/xx.xls</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<br />
<br />
<img src ="http://www.blogjava.net/willpower88/aggbug/176788.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2008-01-21 16:37 <a href="http://www.blogjava.net/willpower88/archive/2008/01/21/176788.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java程序员面试三十二问 </title><link>http://www.blogjava.net/willpower88/archive/2007/11/14/160579.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Wed, 14 Nov 2007 08:27:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2007/11/14/160579.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/160579.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2007/11/14/160579.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/160579.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/160579.html</trackback:ping><description><![CDATA[第一，谈谈final，&nbsp;finally，&nbsp;finalize的区别。&nbsp;<br />
&nbsp;　　final？修饰符（关键字）如果一个类被声明为final，意<br />
&nbsp;味着它不能再派生出新的子类，不能作为父类被继承。因此<br />
&nbsp;一个类不能既被声明为&nbsp;abstract的，又被声明为final的。将<br />
&nbsp;变量或方法声明为final，&nbsp;可以保证它们在使用中不被改变。<br />
&nbsp;被声明为final的变量必须在声明时给定初值，而在以后的引<br />
&nbsp;用中只能&nbsp;读取，不可修改。被声明为final的方法也同样只能<br />
&nbsp;使用，不能重载。finally？再异常处理时提供&nbsp;finally&nbsp;块来执行<br />
&nbsp;任何清除操作。如果抛出一个异常，那么相匹配的&nbsp;catch&nbsp;子<br />
&nbsp;句就会执行，然后控制就会进入&nbsp;finally&nbsp;块（如果有的话）。&nbsp;<br />
&nbsp;finalize？方法名。Java&nbsp;技术允许使用&nbsp;finalize（）&nbsp;方法在垃<br />
&nbsp;圾收集器将对象从内存中清除出去&nbsp;之前做必要的清理工作。<br />
&nbsp;这个方法是由垃圾收集器在确定这个对象没有被引用时对这<br />
&nbsp;个对象调用的。它是&nbsp;在&nbsp;Object&nbsp;类中定义的，因此所有的类<br />
&nbsp;都继承了它。子类覆盖&nbsp;finalize（）&nbsp;方法以整理系统资源或<br />
&nbsp;者执&nbsp;行其他清理工作。finalize（）&nbsp;方法是在垃圾收集器删<br />
&nbsp;除对象之前对这个对象调用的。&nbsp;<br />
&nbsp;　　第二，Anonymous&nbsp;Inner&nbsp;Class&nbsp;（匿名内部类）&nbsp;是否可<br />
&nbsp;以extends（继承）其它类，是否可以&nbsp;<br />
&nbsp;implements（实现）interface（接口）？&nbsp;<br />
&nbsp;　　匿名的内部类是没有名字的内部类。不能extends（继承<br />
&nbsp;）&nbsp;其它类，但一个内部类可以作为一个接口&nbsp;<br />
&nbsp;，由另一个内部类实现。&nbsp;<br />
&nbsp;　　第三，Static&nbsp;Nested&nbsp;Class&nbsp;和&nbsp;Inner&nbsp;Class的不同，说得<br />
&nbsp;越多越好（面试题有的很笼统）。&nbsp;<br />
&nbsp;　　Nested&nbsp;Class&nbsp;（一般是C++的说法），Inner&nbsp;Class&nbsp;（一<br />
&nbsp;般是JAVA的说法）。Java内部类与C++嵌套&nbsp;<br />
&nbsp;类最大的不同就在于是否有指向外部的引用上。具体可<br />
&nbsp;见http：&nbsp;<br />
&nbsp;//www.frontfree.net/articles/services/view.asp？id=704&amp;page<br />
&nbsp;=1&nbsp;<br />
&nbsp;　　注：&nbsp;静态内部类（Inner&nbsp;Class）意味着1创建一个static<br />
&nbsp;内部类的对象，不需要一个外部类对象，2&nbsp;<br />
&nbsp;不能从一个static内部类的一个对象访问一个外部类对象&nbsp;<br />
&nbsp;　　第四，&amp;和&amp;&amp;的区别。&nbsp;<br />
&nbsp;　　&amp;是位运算符。&amp;&amp;是布尔逻辑运算符。&nbsp;<br />
&nbsp;　　第五，HashMap和Hashtable的区别。&nbsp;<br />
&nbsp;　　都属于Map接口的类，实现了将惟一键映射到特定的值<br />
&nbsp;上。&nbsp;<br />
&nbsp;　　HashMap&nbsp;类没有分类或者排序。它允许一个&nbsp;null&nbsp;键和多<br />
&nbsp;个&nbsp;null&nbsp;值。&nbsp;<br />
&nbsp;　　Hashtable&nbsp;类似于&nbsp;HashMap，但是不允许&nbsp;null&nbsp;键和&nbsp;null&nbsp;<br />
&nbsp;值。它也比&nbsp;HashMap&nbsp;慢，因为它是同步&nbsp;<br />
&nbsp;的。&nbsp;<br />
&nbsp;　　第六，Collection&nbsp;和&nbsp;Collections的区别。&nbsp;<br />
&nbsp;　　Collections是个java.util下的类，它包含有各种有关集合<br />
&nbsp;操作的静态方法。&nbsp;<br />
&nbsp;　　Collection是个java.util下的接口，它是各种集合结构的父<br />
&nbsp;接口。&nbsp;<br />
&nbsp;第七，什么时候用assert。&nbsp;<br />
&nbsp;断言是一个包含布尔表达式的语句，在执行这个语句时假定<br />
&nbsp;该表达式为&nbsp;true。如果表达式计算为&nbsp;false，那么系统会报告<br />
&nbsp;一个&nbsp;AssertionError。它用于调试目的：&nbsp;<br />
&nbsp;assert(a&nbsp;&gt;&nbsp;0);&nbsp;//&nbsp;throws&nbsp;an&nbsp;AssertionError&nbsp;if&nbsp;a&nbsp;&lt;=&nbsp;0&nbsp;<br />
&nbsp;断言可以有两种形式：&nbsp;<br />
&nbsp;assert&nbsp;Expression1&nbsp;;&nbsp;<br />
&nbsp;assert&nbsp;Expression1&nbsp;:&nbsp;Expression2&nbsp;;&nbsp;<br />
&nbsp;Expression1&nbsp;应该总是产生一个布尔值。&nbsp;<br />
&nbsp;Expression2&nbsp;可以是得出一个值的任意表达式。这个值用于<br />
&nbsp;生成显示更多调试信息的&nbsp;String&nbsp;消息。&nbsp;<br />
&nbsp;断言在默认情况下是禁用的。要在编译时启用断言，需要使<br />
&nbsp;用&nbsp;source&nbsp;1.4&nbsp;标记：&nbsp;<br />
&nbsp;javac&nbsp;-source&nbsp;1.4&nbsp;Test.java&nbsp;<br />
&nbsp;要在运行时启用断言，可使用&nbsp;-enableassertions&nbsp;或者&nbsp;-ea&nbsp;标<br />
&nbsp;记。&nbsp;<br />
&nbsp;要在运行时选择禁用断言，可使用&nbsp;-da&nbsp;或者&nbsp;<br />
&nbsp;-disableassertions&nbsp;标记。&nbsp;<br />
&nbsp;要系统类中启用断言，可使用&nbsp;-esa&nbsp;或者&nbsp;-dsa&nbsp;标记。还可以<br />
&nbsp;在包的基础上启用或者禁用断言。&nbsp;可以在预计正常情况下不<br />
&nbsp;会到达的任何位置上放置断言。断言可以用于验证传递给私<br />
&nbsp;有方法的参数。不过，断言不应该用于验证传递给公有方法<br />
&nbsp;的参数，因为不管是否启用了断言，公有方法都必须检查其<br />
&nbsp;参数。不过，既可以在公有方法中，也可以在非公有方法中<br />
&nbsp;利用断言测试后置条件。另外，断言不应该以任何方式改变<br />
&nbsp;程序的状态。&nbsp;<br />
&nbsp;第八，GC是什么?&nbsp;为什么要有GC?&nbsp;(基础)。&nbsp;<br />
&nbsp;GC是垃圾收集器。Java&nbsp;程序员不用担心内存管理，因为垃<br />
&nbsp;圾收集器会自动进行管理。要请求垃圾收&nbsp;<br />
&nbsp;集，可以调用下面的方法之一：&nbsp;<br />
&nbsp;System.gc()&nbsp;<br />
&nbsp;Runtime.getRuntime().gc()&nbsp;<br />
&nbsp;第九，String&nbsp;s&nbsp;=&nbsp;new&nbsp;String("xyz");创建了几个String&nbsp;Object?&nbsp;<br />
&nbsp;两个对象，一个是"xyx",一个是指向"xyx"的引用对象s。&nbsp;<br />
&nbsp;第十，Math.round(11.5)等於多少?&nbsp;Math.round(-11.5)等於多<br />
&nbsp;少?&nbsp;<br />
&nbsp;Math.round(11.5)返回（long）12，Math.round(-11.5)返<br />
&nbsp;回（long）-11;&nbsp;<br />
&nbsp;第十一，short&nbsp;s1&nbsp;=&nbsp;1;&nbsp;s1&nbsp;=&nbsp;s1&nbsp;+&nbsp;1;有什么错?&nbsp;short&nbsp;s1&nbsp;=&nbsp;1;&nbsp;s1&nbsp;<br />
&nbsp;+=&nbsp;1;有什么错?&nbsp;<br />
&nbsp;short&nbsp;s1&nbsp;=&nbsp;1;&nbsp;s1&nbsp;=&nbsp;s1&nbsp;+&nbsp;1;有错，s1是short型，s1+1是int型,不<br />
&nbsp;能显式转化为short型。可修改为&nbsp;s1&nbsp;=(short)(s1&nbsp;+&nbsp;1)&nbsp;。short&nbsp;<br />
&nbsp;s1&nbsp;=&nbsp;1;&nbsp;s1&nbsp;+=&nbsp;1正确。&nbsp;<br />
&nbsp;第十二，sleep()&nbsp;和&nbsp;wait()&nbsp;有什么区别?&nbsp;搞线程的最爱&nbsp;<br />
&nbsp;sleep()方法是使线程停止一段时间的方法。在sleep&nbsp;时间间<br />
&nbsp;隔期满后，线程不一定立即恢复执行。&nbsp;这是因为在那个时刻<br />
&nbsp;，其它线程可能正在运行而且没有被调度为放弃执行，除<br />
&nbsp;非(a)"醒来"的线程具有更高的优先级，(b)正在运行的线程因<br />
&nbsp;为其它原因而阻塞。&nbsp;<br />
&nbsp;wait()是线程交互时，如果线程对一个同步对象x&nbsp;发出一<br />
&nbsp;个wait()调用，该线程会暂停执行，被调对象进入等待状态，<br />
&nbsp;直到被唤醒或等待时间到。&nbsp;<br />
&nbsp;第十三，Java有没有goto?&nbsp;<br />
&nbsp;Goto?java中的保留字，现在没有在java中使用。&nbsp;<br />
&nbsp;第十四，数组有没有length()这个方法?&nbsp;String有没有length()<br />
&nbsp;这个方法？&nbsp;<br />
&nbsp;数组没有length()这个方法，有length的属性。&nbsp;<br />
&nbsp;String有有length()这个方法。<br />
&nbsp;&nbsp;<br />
&nbsp;第十五，Overload和Override的区别。Overloaded的方法是<br />
&nbsp;否可以改变返回值的类型?&nbsp;<br />
&nbsp;方法的重写Overriding和重载Overloading是Java多态性的不<br />
&nbsp;同表现。重写Overriding是父类与子类&nbsp;之间多态性的一种表<br />
&nbsp;现，重载Overloading是一个类中多态性的一种表现。如果在<br />
&nbsp;子类中定义某方法与其父类有相同的名称和参数，我们说该<br />
&nbsp;方法被重写&nbsp;(Overriding)。子类的对象使用这个方法时，将调<br />
&nbsp;用子类中的定义，对它而言，父类中的定义如同被"屏蔽"了<br />
&nbsp;。如果在一个类中定义了多个同名的方法，它们或有不同的<br />
&nbsp;参数个数或有不同的参数类型，则称为方法的重<br />
&nbsp;载(Overloading)。Overloaded的方法是可以改变返回值的类<br />
&nbsp;型。&nbsp;<br />
&nbsp;第十六，Set里的元素是不能重复的，那么用什么方法来区<br />
&nbsp;分重复与否呢?&nbsp;是用==还是equals()?&nbsp;它们有何区别?&nbsp;<br />
&nbsp;Set里的元素是不能重复的，那么用iterator()方法来区分重复<br />
&nbsp;与否。equals()是判读两个Set是否相&nbsp;等。&nbsp;<br />
&nbsp;equals()和==方法决定引用值是否指向同一对象equals()在类<br />
&nbsp;中被覆盖，为的是当两个分离的对象的内容和类型相配的话<br />
&nbsp;，返回真值。&nbsp;<br />
&nbsp;第十七，给我一个你最常见到的runtime&nbsp;exception。&nbsp;<br />
&nbsp;ArithmeticException,&nbsp;ArrayStoreException,&nbsp;<br />
&nbsp;BufferOverflowException,&nbsp;<br />
&nbsp;BufferUnderflowException,&nbsp;CannotRedoException,&nbsp;<br />
&nbsp;CannotUndoException,&nbsp;ClassCastException,&nbsp;<br />
&nbsp;CMMException,&nbsp;ConcurrentModificationException,&nbsp;<br />
&nbsp;DOMException,&nbsp;EmptyStackException,&nbsp;<br />
&nbsp;IllegalArgumentException,&nbsp;IllegalMonitorStateException,&nbsp;<br />
&nbsp;IllegalPathStateException,&nbsp;<br />
&nbsp;IllegalStateException,&nbsp;ImagingOpException,&nbsp;<br />
&nbsp;IndexOutOfBoundsException,&nbsp;<br />
&nbsp;MissingResourceException,&nbsp;NegativeArraySizeException,&nbsp;<br />
&nbsp;NoSuchElementException,&nbsp;<br />
&nbsp;NullPointerException,&nbsp;ProfileDataException,&nbsp;<br />
&nbsp;ProviderException,&nbsp;RasterFormatException,&nbsp;<br />
&nbsp;SecurityException,&nbsp;SystemException,&nbsp;<br />
&nbsp;UndeclaredThrowableException,&nbsp;UnmodifiableSetException,&nbsp;<br />
&nbsp;UnsupportedOperationException&nbsp;<br />
&nbsp;第十八，error和exception有什么区别?&nbsp;<br />
&nbsp;error&nbsp;表示恢复不是不可能但很困难的情况下的一种严重问题<br />
&nbsp;。比如说内存溢出。不可能指望程序能处理这样的情况。&nbsp;<br />
&nbsp;exception&nbsp;表示一种设计或实现问题。也就是说，它表示如果<br />
&nbsp;程序运行正常，从不会发生的情况。&nbsp;<br />
&nbsp;第十九，List,&nbsp;Set,&nbsp;Map是否继承自Collection接口?&nbsp;<br />
&nbsp;List，Set是&nbsp;<br />
&nbsp;Map不是&nbsp;<br />
&nbsp;第二十，abstract&nbsp;class和interface有什么区别?&nbsp;<br />
&nbsp;声明方法的存在而不去实现它的类被叫做抽象类（abstract&nbsp;<br />
&nbsp;class），它用于要创建一个体现某些基本行为的类，并为该<br />
&nbsp;类声明方法，但不能在该类中实现该类的情况。不能创<br />
&nbsp;建abstract&nbsp;类的实例。然而可以创建一个变量，其类型是一<br />
&nbsp;个抽象类，并让它指向具体子类的一个实例。不能有抽象构<br />
&nbsp;造函数或抽象静态方法。Abstract&nbsp;类的子类为它们父类中的<br />
&nbsp;所有抽象方法提供实现，否则它们也是抽象类为。取而代之<br />
&nbsp;，在子类中实现该方法。知道其行为的其它类可以在类中实<br />
&nbsp;现这些方法。&nbsp;<br />
&nbsp;接口（interface）是抽象类的变体。在接口中，所有方法都<br />
&nbsp;是抽象的。多继承性可通过实现这样的接口而获得。接口中<br />
&nbsp;的所有方法都是抽象的，没有一个有程序体。接口只可以定<br />
&nbsp;义static&nbsp;final成员变量。接口的实现与子类相似，除了该实现<br />
&nbsp;类不能从接口定义中继承行为。当类实现特殊接口时，它定<br />
&nbsp;义（即将程序体给予）所有这种接口的方法。然后，它可以<br />
&nbsp;在实现了该接口的类的任何对象上调用接口的方法.由于有抽<br />
&nbsp;象类，它允许使用接口名作为引用变量的类型。通常的动态<br />
&nbsp;联编将生效。引用可以转换到接口类型或从接口类型转<br />
&nbsp;换，instanceof&nbsp;运算符可以用来决定某对象的类是否实现了<br />
&nbsp;接口。&nbsp;<br />
&nbsp;第二十一，abstract的method是否可同时是static,是否可同时<br />
&nbsp;是native，是否可同时是&nbsp;<br />
&nbsp;synchronized?&nbsp;<br />
&nbsp;都不能&nbsp;<br />
&nbsp;第二十二，接口是否可继承接口?&nbsp;抽象类是否可实<br />
&nbsp;现(implements)接口?&nbsp;抽象类是否可继承实体类&nbsp;<br />
&nbsp;(concrete&nbsp;class)?&nbsp;<br />
&nbsp;接口可以继承接口。抽象类可以实现(implements)接口，抽象<br />
&nbsp;类是否可继承实体类，但前提是实体类必须有明确的构造函<br />
&nbsp;数。&nbsp;<br />
&nbsp;第二十三，启动一个线程是用run()还是start()?&nbsp;<br />
&nbsp;启动一个线程是调用start()方法，使线程所代表的虚拟处理<br />
&nbsp;机处于可运行状态，这意味着它可以由JVM调度并执行。这<br />
&nbsp;并不意味着线程就会立即运行。run()方法可以产生必须退出<br />
&nbsp;的标志来停止一个线程。&nbsp;<br />
&nbsp;&nbsp;<br />
&nbsp;第二十四，构造器Constructor是否可被override?&nbsp;<br />
&nbsp;构造器Constructor不能被继承，因此不能重写Overriding，但<br />
&nbsp;可以被重载Overloading。&nbsp;<br />
&nbsp;第二十五，是否可以继承String类?&nbsp;<br />
&nbsp;String类是final类故不可以继承。&nbsp;<br />
&nbsp;第二十六，当一个线程进入一个对象的一个synchronized方<br />
&nbsp;法后，其它线程是否可进入此对象的其它方法?&nbsp;<br />
&nbsp;不能，一个对象的一个synchronized方法只能由一个线程访<br />
&nbsp;问。&nbsp;<br />
&nbsp;第二十七，try&nbsp;{}里有一个return语句，那么紧跟在这个try后<br />
&nbsp;的finally&nbsp;{}里的code会不会被执行，什么时候被执<br />
&nbsp;行，在return前还是后?&nbsp;<br />
&nbsp;会执行，在return前执行。&nbsp;<br />
&nbsp;第二十八，编程题:&nbsp;用最有效率的方法算出2乘以8等於几?&nbsp;<br />
&nbsp;有C背景的程序员特别喜欢问这种问题。&nbsp;<br />
&nbsp;2&nbsp;&lt;&lt;&nbsp;3&nbsp;<br />
&nbsp;第二十九，两个对象值相同(x.equals(y)&nbsp;==&nbsp;true)，但却可有<br />
&nbsp;不同的hash&nbsp;code，这句话对不对?&nbsp;<br />
&nbsp;不对，有相同的hash&nbsp;code。&nbsp;<br />
&nbsp;第三十，当一个对象被当作参数传递到一个方法后，此方法<br />
&nbsp;可改变这个对象的属性，并可返回变化后的结果，那么这里<br />
&nbsp;到底是值传递还是引用传递?&nbsp;<br />
&nbsp;是值传递。Java&nbsp;编程语言只由值传递参数。当一个对象实例<br />
&nbsp;作为一个参数被传递到方法中时，参数的值就是对该对象的<br />
&nbsp;引用。对象的内容可以在被调用的方法中改变，但对象的引<br />
&nbsp;用是永远不会改变的。&nbsp;<br />
&nbsp;第三十一，swtich是否能作用在byte上，是否能作用在long上<br />
&nbsp;，是否能作用在String上?&nbsp;<br />
&nbsp;switch（expr1）中，expr1是一个整数表达式。因此传递给&nbsp;<br />
&nbsp;switch&nbsp;和&nbsp;case&nbsp;语句的参数应该是&nbsp;int、&nbsp;short、&nbsp;char&nbsp;或者&nbsp;<br />
&nbsp;byte。long,string&nbsp;都不能作用于swtich。&nbsp;<br />
&nbsp;第三十二，编程题:&nbsp;写一个Singleton出来。&nbsp;<br />
&nbsp;Singleton模式主要作用是保证在Java应用程序中，一个<br />
&nbsp;类Class只有一个实例存在。&nbsp;<br />
&nbsp;一般Singleton模式通常有几种种形式:&nbsp;<br />
&nbsp;第一种形式:&nbsp;　　定义一个类，它的构造函数为private的，<br />
&nbsp;它有一个static的private的该类变量，&nbsp;在类初始化时实例话<br />
&nbsp;，通过一个public的getInstance方法获取对它的引用,继而调<br />
&nbsp;用其中的方法。&nbsp;<br />
&nbsp;public&nbsp;class&nbsp;Singleton&nbsp;{&nbsp;<br />
&nbsp;private&nbsp;Singleton(){}&nbsp;<br />
&nbsp;//在自己内部定义自己一个实例，是不是很奇怪？&nbsp;<br />
&nbsp;//注意这是private&nbsp;只供内部调用&nbsp;<br />
&nbsp;private&nbsp;static&nbsp;Singleton&nbsp;instance&nbsp;=&nbsp;new&nbsp;Singleton();&nbsp;<br />
&nbsp;//这里提供了一个供外部访问本class的静态方法，可以直接<br />
&nbsp;访问&nbsp;<br />
&nbsp;public&nbsp;static&nbsp;Singleton&nbsp;getInstance()&nbsp;{&nbsp;<br />
&nbsp;return&nbsp;instance;&nbsp;<br />
&nbsp;}&nbsp;<br />
&nbsp;}&nbsp;<br />
&nbsp;第二种形式:&nbsp;<br />
&nbsp;public&nbsp;class&nbsp;Singleton&nbsp;{&nbsp;<br />
&nbsp;private&nbsp;static&nbsp;Singleton&nbsp;instance&nbsp;=&nbsp;null;&nbsp;<br />
&nbsp;public&nbsp;static&nbsp;synchronized&nbsp;Singleton&nbsp;getInstance()&nbsp;{&nbsp;<br />
&nbsp;//这个方法比上面有所改进，不用每次都进行生成对象，只<br />
&nbsp;是第一次&nbsp;<br />
&nbsp;//使用时生成实例，提高了效率！&nbsp;<br />
&nbsp;if&nbsp;(instance==null)&nbsp;<br />
&nbsp;instance＝new&nbsp;Singleton();&nbsp;<br />
&nbsp;return&nbsp;instance;&nbsp;}&nbsp;<br />
&nbsp;}&nbsp;<br />
&nbsp;其他形式:&nbsp;<br />
&nbsp;定义一个类，它的构造函数为private的，所有方法为static的<br />
&nbsp;。&nbsp;<br />
&nbsp;一般认为第一种形式要更加安全些&nbsp;<br />
&nbsp;第三十三&nbsp;Hashtable和HashMap&nbsp;<br />
&nbsp;Hashtable继承自Dictionary类，而HashMap是Java1.2引进的<br />
&nbsp;Map&nbsp;interface的一个实现&nbsp;<br />
&nbsp;HashMap允许将null作为一个entry的key或<br />
&nbsp;者value，而Hashtable不允许&nbsp;<br />
&nbsp;还有就是，HashMap把Hashtable的contains方法去掉了，改<br />
&nbsp;成containsvalue和containsKey。因为&nbsp;contains方法容易让人<br />
&nbsp;引起误解。&nbsp;<br />
&nbsp;最大的不同是，Hashtable的方法<br />
&nbsp;是Synchronize的，而HashMap不是，在多个线程访<br />
&nbsp;问Hashtable时，不需要自己为它的方法实现同<br />
&nbsp;步，而HashMap就必须为之提供外同步。&nbsp;<br />
&nbsp;Hashtable和HashMap采用的hash/rehash算法都大概一样，<br />
&nbsp;所以性能不会有很大的差异&nbsp;
<img src ="http://www.blogjava.net/willpower88/aggbug/160579.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2007-11-14 16:27 <a href="http://www.blogjava.net/willpower88/archive/2007/11/14/160579.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java对于数字证书的常用操作方法 转帖</title><link>http://www.blogjava.net/willpower88/archive/2007/11/14/160576.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Wed, 14 Nov 2007 08:08:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2007/11/14/160576.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/160576.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2007/11/14/160576.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/160576.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/160576.html</trackback:ping><description><![CDATA[一：需要包含的包
<p>&nbsp;　　</p>
<p>&nbsp;　　import&nbsp;java.security.*;</p>
<p>&nbsp;　　import&nbsp;java.io.*;</p>
<p>&nbsp;　　import&nbsp;java.util.*;</p>
<p>&nbsp;　　import&nbsp;java.security.*;</p>
<p>&nbsp;　　import&nbsp;java.security.cert.*;</p>
<p>&nbsp;　　import&nbsp;sun.security.x509.*</p>
<p>&nbsp;　　import&nbsp;java.security.cert.Certificate;</p>
<p>&nbsp;　　import&nbsp;java.security.cert.CertificateFactory;</p>
<p>&nbsp;　　二：从文件中读取证书</p>
<p>&nbsp;　　用keytool将.keystore中的证书写入文件中，然后从该文件中读取证书信息</p>
<p>&nbsp;　　CertificateFactory&nbsp;cf=CertificateFactory.getInstance("X.509");</p>
<p>&nbsp;　　FileInputStream&nbsp;in=new&nbsp;FileInputStream("out.csr");</p>
<p>&nbsp;　　Certificate&nbsp;c=cf.generateCertificate(in);</p>
<p>&nbsp;　　String&nbsp;s=c.toString();</p>
<p>&nbsp;　　三：从密钥库中直接读取证书</p>
<p>&nbsp;　　String&nbsp;pass="123456";</p>
<p>&nbsp;　　FileInputStream&nbsp;in=new&nbsp;FileInputStream(".keystore");</p>
<p>&nbsp;　　KeyStore&nbsp;ks=KeyStore.getInstance("JKS");</p>
<p>&nbsp;　　ks.load(in,pass.toCharArray());</p>
<p>&nbsp;　　java.security.cert.Certificate&nbsp;c=ks.getCertificate(alias);//alias为条目的别名</p>
<p>&nbsp;　　四：JAVA程序中显示证书指定信息</p>
<p>&nbsp;　　System.out.println("输出证书信息:\n"+c.toString());</p>
<p>&nbsp;　　System.out.println("版本号:"+t.getVersion());</p>
<p>&nbsp;　　System.out.println("序列号:"+t.getSerialNumber().toString(16));</p>
<p>&nbsp;　　System.out.println("主体名："+t.getSubjectDN());</p>
<p>&nbsp;　　System.out.println("签发者："+t.getIssuerDN());</p>
<p>&nbsp;　　System.out.println("有效期："+t.getNotBefore());</p>
<p>&nbsp;　　System.out.println("签名算法："+t.getSigAlgName());</p>
<p>&nbsp;　　byte&nbsp;[]&nbsp;sig=t.getSignature();//签名值</p>
<p>&nbsp;　　PublicKey&nbsp;pk=t.getPublicKey();</p>
<p>&nbsp;　　byte&nbsp;[]&nbsp;pkenc=pk.getEncoded();</p>
<p>&nbsp;　　System.out.println("公钥");</p>
<p>&nbsp;　　for(int&nbsp;i=0;i&lt;pkenc.length;i++)System.out.print(pkenc[i]+",");</p>
<p>&nbsp;　　五：JAVA程序列出密钥库所有条目<br />
&nbsp;String&nbsp;pass="123456";</p>
<p>&nbsp;　　FileInputStream&nbsp;in=new&nbsp;FileInputStream(".keystore");</p>
<p>&nbsp;　　KeyStore&nbsp;ks=KeyStore.getInstance("JKS");</p>
<p>&nbsp;　　ks.load(in,pass.toCharArray());</p>
<p>&nbsp;　　Enumeration&nbsp;e=ks.aliases();</p>
<p>&nbsp;　　while(e.hasMoreElements())</p>
<p>&nbsp;　　java.security.cert.Certificate&nbsp;c=ks.getCertificate((String)e.nextElement());</p>
<p>&nbsp;　　六：JAVA程序修改密钥库口令</p>
<p>&nbsp;　　String&nbsp;oldpass="123456";</p>
<p>&nbsp;　　String&nbsp;newpass="654321";</p>
<p>&nbsp;　　FileInputStream&nbsp;in=new&nbsp;FileInputStream(".keystore");</p>
<p>&nbsp;　　KeyStore&nbsp;ks=KeyStore.getInstance("JKS");</p>
<p>&nbsp;　　ks.load(in,oldpass.toCharArray());</p>
<p>&nbsp;　　in.close();</p>
<p>&nbsp;　　FileOutputStream&nbsp;output=new&nbsp;FileOutputStream(".keystore");</p>
<p>&nbsp;　　ks.store(output,newpass.toCharArray());</p>
<p>&nbsp;　　output.close();</p>
<p>&nbsp;　　七：JAVA程序修改密钥库条目的口令及添加条目</p>
<p>&nbsp;　　FileInputStream&nbsp;in=new&nbsp;FileInputStream(".keystore");</p>
<p>&nbsp;　　KeyStore&nbsp;ks=KeyStore.getInstance("JKS");</p>
<p>&nbsp;　　ks.load(in,storepass.toCharArray());</p>
<p>&nbsp;　　Certificate&nbsp;[]&nbsp;cchain=ks.getCertificate(alias);获取别名对应条目的证书链</p>
<p>&nbsp;　　PrivateKey&nbsp;pk=(PrivateKey)ks.getKey(alias,oldkeypass.toCharArray());获取别名对应条目的私钥</p>
<p>&nbsp;　　ks.setKeyEntry(alias,pk,newkeypass.toCharArray(),cchain);向密钥库中添加条目</p>
<p>&nbsp;　　第一个参数指定所添加条目的别名，假如使用已存在别名将覆盖已存在条目，使用新别名将增加一个新条目，第二个参数为条目的私钥，第三个为设置的新口令，第四个为该私钥的公钥的证书链</p>
<p>&nbsp;　　FileOutputStream&nbsp;output=new&nbsp;FileOutputStream("another");</p>
<p>&nbsp;　　ks.store(output,storepass.toCharArray())将keystore对象内容写入新文件</p>
<p>&nbsp;　　八：JAVA程序检验别名和删除条目</p>
<p>&nbsp;　　FileInputStream&nbsp;in=new&nbsp;FileInputStream(".keystore");</p>
<p>&nbsp;　　KeyStore&nbsp;ks=KeyStore.getInstance("JKS");</p>
<p>&nbsp;　　ks.load(in,storepass.toCharArray());<br />
&nbsp;ks.containsAlias("sage");检验条目是否在密钥库中，存在返回true</p>
<p>&nbsp;　　ks.deleteEntry("sage");删除别名对应的条目</p>
<p>&nbsp;　　FileOutputStream&nbsp;output=new&nbsp;FileOutputStream(".keystore");</p>
<p>&nbsp;　　ks.store(output,storepass.toCharArray())将keystore对象内容写入文件,条目删除成功</p>
<p>&nbsp;九：JAVA程序签发数字证书</p>
<p>&nbsp;　　</p>
<p>&nbsp;　　（1）从密钥库中读取CA的证书</p>
<p>&nbsp;　　FileInputStream&nbsp;in=new&nbsp;FileInputStream(".keystore");</p>
<p>&nbsp;　　KeyStore&nbsp;ks=KeyStore.getInstance("JKS");</p>
<p>&nbsp;　　ks.load(in,storepass.toCharArray());</p>
<p>&nbsp;　　java.security.cert.Certificate&nbsp;c1=ks.getCertificate("caroot");</p>
<p>&nbsp;　　（2）从密钥库中读取CA的私钥</p>
<p>&nbsp;　　PrivateKey&nbsp;caprk=(PrivateKey)ks.getKey(alias,cakeypass.toCharArray());</p>
<p>&nbsp;　　（3）从CA的证书中提取签发者的信息</p>
<p>&nbsp;　　byte[]&nbsp;encod1=c1.getEncoded();　　提取CA证书的编码</p>
<p>&nbsp;　　X509CertImpl&nbsp;cimp1=new&nbsp;X509CertImpl(encod1);　用该编码创建X509CertImpl类型对象</p>
<p>&nbsp;　　X509CertInfo&nbsp;cinfo1=(X509CertInfo)cimp1.get(X509CertImpl.NAME+"."+X509CertImpl.INFO);　获取X509CertInfo对象</p>
<p>&nbsp;　　X500Name&nbsp;issuer=(X500Name)cinfo1.get(X509CertInfo.SUBJECT+"."+CertificateIssuerName.DN_NAME);&nbsp;获取X509Name类型的签发者信息</p>
<p>&nbsp;　　（4）获取待签发的证书</p>
<p>&nbsp;　　CertificateFactory&nbsp;cf=CertificateFactory.getInstance("X.509");</p>
<p>&nbsp;　　FileInputStream&nbsp;in2=new&nbsp;FileInputStream("user.csr");</p>
<p>&nbsp;　　java.security.cert.Certificate&nbsp;c2=cf.generateCertificate(in);</p>
<p>&nbsp;　　（5）从待签发的证书中提取证书信息</p>
<p>&nbsp;　　byte&nbsp;[]&nbsp;encod2=c2.getEncoded();</p>
<p>&nbsp;　　X509CertImpl&nbsp;cimp2=new&nbsp;X509CertImpl(encod2);　用该编码创建X509CertImpl类型对象</p>
<p>&nbsp;　　X509CertInfo&nbsp;cinfo2=(X509CertInfo)cimp2.get(X509CertImpl.NAME+"."+X509CertImpl.INFO);　获取X509CertInfo对象</p>
<p>&nbsp;　　（6）设置新证书有效期</p>
<p>&nbsp;　　Date&nbsp;begindate=new&nbsp;Date();&nbsp;获取当前时间</p>
<p>&nbsp;　　Date&nbsp;enddate=new&nbsp;Date(begindate.getTime()+3000*24*60*60*1000L);&nbsp;有效期为3000天<br />
&nbsp;CertificateValidity&nbsp;cv=new&nbsp;CertificateValidity(begindate,enddate);&nbsp;创建对象</p>
<p>&nbsp;　　cinfo2.set(X509CertInfo.VALIDITY,cv);　设置有效期</p>
<p>&nbsp;　　（7）设置新证书序列号</p>
<p>&nbsp;　　int&nbsp;sn=(int)(begindate.getTime()/1000);　　以当前时间为序列号</p>
<p>&nbsp;　　CertificateSerialNumber&nbsp;csn=new&nbsp;CertificateSerialNumber(sn);</p>
<p>&nbsp;　　cinfo2.set(X509CertInfo.SERIAL_NUMBER,csn);</p>
<p>&nbsp;　　（8）设置新证书签发者</p>
<p>&nbsp;　　cinfo2.set(X509CertInfo.ISSUER+"."+CertificateIssuerName.DN_NAME,issuer);应用第三步的结果</p>
<p>&nbsp;　　（9）设置新证书签名算法信息</p>
<p>&nbsp;　　AlgorithmId&nbsp;algorithm=new&nbsp;AlgorithmId(AlgorithmId.md5WithRSAEncryption_oid);</p>
<p>&nbsp;　　cinfo2.set(CertificateAlgorithmId.NAME+"."+CertificateAlgorithmId.ALGORITHM,algorithm);</p>
<p>&nbsp;　　（10）创建证书并使用CA的私钥对其签名</p>
<p>&nbsp;　　X509CertImpl&nbsp;newcert=new&nbsp;X509CertImpl(cinfo2);</p>
<p>&nbsp;　　newcert.sign(caprk,"MD5WithRSA");&nbsp;使用CA私钥对其签名</p>
<p>&nbsp;　　（11）将新证书写入密钥库</p>
<p>&nbsp;　　ks.setCertificateEntry("lf_signed",newcert);</p>
<p>&nbsp;　　FileOutputStream&nbsp;out=new&nbsp;FileOutputStream("newstore");</p>
<p>&nbsp;　　ks.store(out,"newpass".toCharArray());　这里是写入了新的密钥库，也可以使用第七条来增加条目</p>
<p>&nbsp;　　十：数字证书的检验</p>
<p>&nbsp;　　（1）验证证书的有效期</p>
<p>&nbsp;　　（a）获取X509Certificate类型对象</p>
<p>&nbsp;　　CertificateFactory&nbsp;cf=CertificateFactory.getInstance("X.509");</p>
<p>&nbsp;　　FileInputStream&nbsp;in1=new&nbsp;FileInputStream("aa.crt");</p>
<p>&nbsp;　　java.security.cert.Certificate　c1=cf.generateCertificate(in1);</p>
<p>&nbsp;　　X509Certificate&nbsp;t=(X509Certificate)c1;</p>
<p>&nbsp;　　in2.close();</p>
<p>&nbsp;　　（b）获取日期</p>
<p>&nbsp;　　Date&nbsp;TimeNow=new&nbsp;Date();</p>
<p>&nbsp;　　（c）检验有效性</p>
<p>&nbsp;　　try{</p>
<p>&nbsp;　　t.checkValidity(TimeNow);</p>
<p>&nbsp;　　System.out.println("OK");</p>
<p>&nbsp;　　}catch(CertificateExpiredException&nbsp;e){　//过期</p>
<p>&nbsp;　　System.out.println("Expired");<br />
&nbsp;System.out.println(e.getMessage());</p>
<p>&nbsp;　　}catch((CertificateNotYetValidException&nbsp;e){&nbsp;//尚未生效</p>
<p>&nbsp;　　System.out.println("Too&nbsp;early");</p>
<p>&nbsp;　　System.out.println(e.getMessage());}</p>
<p>&nbsp;　　（2）验证证书签名的有效性</p>
<p>&nbsp;　　（a）获取CA证书</p>
<p>&nbsp;　　CertificateFactory&nbsp;cf=CertificateFactory.getInstance("X.509");</p>
<p>&nbsp;　　FileInputStream&nbsp;in2=new&nbsp;FileInputStream("caroot.crt");</p>
<p>&nbsp;　　java.security.cert.Certificate　cac=cf.generateCertificate(in2);</p>
<p>&nbsp;　　in2.close();</p>
<p>&nbsp;　　（c）获取CA的公钥</p>
<p>&nbsp;　　PublicKey&nbsp;pbk=cac.getPublicKey();</p>
<p>&nbsp;　　（b）获取待检验的证书（上步已经获取了，就是C1）</p>
<p>&nbsp;　　（c）检验证书</p>
<p>&nbsp;　　boolean&nbsp;pass=false;</p>
<p>&nbsp;　　try{</p>
<p>&nbsp;　　c1.verify(pbk);</p>
<p>&nbsp;　　pass=true;</p>
<p>&nbsp;　　}catch(Exception&nbsp;e){</p>
<p>&nbsp;　　pass=false;</p>
<p>&nbsp;　　System.out.println(e);</p>
&nbsp;　　}&nbsp;
<img src ="http://www.blogjava.net/willpower88/aggbug/160576.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2007-11-14 16:08 <a href="http://www.blogjava.net/willpower88/archive/2007/11/14/160576.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用ResourceBundle读取.properties文件可避免路径问题</title><link>http://www.blogjava.net/willpower88/archive/2007/06/01/121326.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Fri, 01 Jun 2007 03:34:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2007/06/01/121326.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/121326.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2007/06/01/121326.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/121326.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/121326.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我在jar里读取.properties文件时，总是找不到文件路径，后来用ResourceBundle读取.properties文件即可避免路径问题，代码如下：<br>&nbsp;&nbsp;&nbsp;&nbsp; </p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;//process为文件名，切记不要加&nbsp;.properties， URL是文件里的键名<br><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ResourceBundle&nbsp;bundle&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ResourceBundle.getBundle(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">com.ihandy.smsoc.app.process</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;s&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;bundle.getString(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">URL</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;System.out.println(s);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;pURL&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;s;</span></div>
<img src ="http://www.blogjava.net/willpower88/aggbug/121326.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2007-06-01 11:34 <a href="http://www.blogjava.net/willpower88/archive/2007/06/01/121326.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java实现各种排序算法</title><link>http://www.blogjava.net/willpower88/archive/2007/04/10/109680.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Tue, 10 Apr 2007 09:09:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2007/04/10/109680.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/109680.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2007/04/10/109680.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/109680.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/109680.html</trackback:ping><description><![CDATA[转贴自：http://www.waynet.cn/conch/&nbsp;&nbsp;&nbsp;&nbsp;
<p>&#160;</p>
<p>&nbsp;插入排序:</p>
<p>&nbsp;package&nbsp;org.rut.util.algorithm.support;</p>
<p>&nbsp;import&nbsp;org.rut.util.algorithm.SortUtil;<br>&nbsp;/**<br>&nbsp;&nbsp;*&nbsp;@author&nbsp;treeroot<br>&nbsp;&nbsp;*&nbsp;@since&nbsp;2006-2-2<br>&nbsp;&nbsp;*&nbsp;@version&nbsp;1.0<br>&nbsp;&nbsp;*/<br>&nbsp;public&nbsp;class&nbsp;InsertSort&nbsp;implements&nbsp;SortUtil.Sort{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;(non-Javadoc)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@see&nbsp;org.rut.util.algorithm.SortUtil.Sort#sort(int[])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;sort(int[]&nbsp;data)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;temp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i=1;i&lt;data.length;i++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;j=i;(j&gt;0)&amp;&amp;(data[j]&lt;data[j-1]);j--){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SortUtil.swap(data,j,j-1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;}<br>&nbsp;冒泡排序:</p>
<p>&nbsp;package&nbsp;org.rut.util.algorithm.support;</p>
<p>&nbsp;import&nbsp;org.rut.util.algorithm.SortUtil;</p>
<p>&nbsp;/**<br>&nbsp;&nbsp;*&nbsp;@author&nbsp;treeroot<br>&nbsp;&nbsp;*&nbsp;@since&nbsp;2006-2-2<br>&nbsp;&nbsp;*&nbsp;@version&nbsp;1.0<br>&nbsp;&nbsp;*/<br>&nbsp;public&nbsp;class&nbsp;BubbleSort&nbsp;implements&nbsp;SortUtil.Sort{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;(non-Javadoc)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@see&nbsp;org.rut.util.algorithm.SortUtil.Sort#sort(int[])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;sort(int[]&nbsp;data)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;temp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i=0;i&lt;data.length;i++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;j=data.length-1;j&gt;i;j--){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(data[j]&lt;data[j-1]){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SortUtil.swap(data,j,j-1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;}</p>
<p>&nbsp;选择排序:</p>
<p>&nbsp;package&nbsp;org.rut.util.algorithm.support;</p>
<p>&nbsp;import&nbsp;org.rut.util.algorithm.SortUtil;</p>
<p>&nbsp;/**<br>&nbsp;&nbsp;*&nbsp;@author&nbsp;treeroot<br>&nbsp;&nbsp;*&nbsp;@since&nbsp;2006-2-2<br>&nbsp;&nbsp;*&nbsp;@version&nbsp;1.0<br>&nbsp;&nbsp;*/<br>&nbsp;public&nbsp;class&nbsp;SelectionSort&nbsp;implements&nbsp;SortUtil.Sort&nbsp;{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;(non-Javadoc)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@see&nbsp;org.rut.util.algorithm.SortUtil.Sort#sort(int[])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;sort(int[]&nbsp;data)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;temp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;data.length;&nbsp;i++)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;lowIndex&nbsp;=&nbsp;i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;j&nbsp;=&nbsp;data.length&nbsp;-&nbsp;1;&nbsp;j&nbsp;&gt;&nbsp;i;&nbsp;j--)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(data[j]&nbsp;&lt;&nbsp;data[lowIndex])&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lowIndex&nbsp;=&nbsp;j;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SortUtil.swap(data,i,lowIndex);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;}</p>
<p>&nbsp;Shell排序:</p>
<p>&nbsp;package&nbsp;org.rut.util.algorithm.support;</p>
<p>&nbsp;import&nbsp;org.rut.util.algorithm.SortUtil;</p>
<p>&nbsp;/**<br>&nbsp;&nbsp;*&nbsp;@author&nbsp;treeroot<br>&nbsp;&nbsp;*&nbsp;@since&nbsp;2006-2-2<br>&nbsp;&nbsp;*&nbsp;@version&nbsp;1.0<br>&nbsp;&nbsp;*/<br>&nbsp;public&nbsp;class&nbsp;ShellSort&nbsp;implements&nbsp;SortUtil.Sort{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;(non-Javadoc)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@see&nbsp;org.rut.util.algorithm.SortUtil.Sort#sort(int[])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;sort(int[]&nbsp;data)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i=data.length/2;i&gt;2;i/=2){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;j=0;j&lt;i;j++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insertSort(data,j,i);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insertSort(data,0,1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;data<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;j<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;i<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;void&nbsp;insertSort(int[]&nbsp;data,&nbsp;int&nbsp;start,&nbsp;int&nbsp;inc)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;temp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i=start+inc;i&lt;data.length;i+=inc){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;j=i;(j&gt;=inc)&amp;&amp;(data[j]&lt;data[j-inc]);j-=inc){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SortUtil.swap(data,j,j-inc);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;}</p>
<p>&nbsp;快速排序:</p>
<p>&nbsp;package&nbsp;org.rut.util.algorithm.support;</p>
<p>&nbsp;import&nbsp;org.rut.util.algorithm.SortUtil;</p>
<p>&nbsp;/**<br>&nbsp;&nbsp;*&nbsp;@author&nbsp;treeroot<br>&nbsp;&nbsp;*&nbsp;@since&nbsp;2006-2-2<br>&nbsp;&nbsp;*&nbsp;@version&nbsp;1.0<br>&nbsp;&nbsp;*/<br>&nbsp;public&nbsp;class&nbsp;QuickSort&nbsp;implements&nbsp;SortUtil.Sort{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;(non-Javadoc)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@see&nbsp;org.rut.util.algorithm.SortUtil.Sort#sort(int[])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;sort(int[]&nbsp;data)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;quickSort(data,0,data.length-1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;void&nbsp;quickSort(int[]&nbsp;data,int&nbsp;i,int&nbsp;j){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;pivotIndex=(i+j)/2;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//swap<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SortUtil.swap(data,pivotIndex,j);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;k=partition(data,i-1,j,data[j]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SortUtil.swap(data,k,j);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((k-i)&gt;1)&nbsp;quickSort(data,i,k-1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((j-k)&gt;1)&nbsp;quickSort(data,k+1,j);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;data<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;i<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;j<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;int&nbsp;partition(int[]&nbsp;data,&nbsp;int&nbsp;l,&nbsp;int&nbsp;r,int&nbsp;pivot)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(data[++l]&lt;pivot);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while((r!=0)&amp;&amp;data[--r]&gt;pivot);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SortUtil.swap(data,l,r);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(l&lt;r);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SortUtil.swap(data,l,r);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;l;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;}<br>&nbsp;改进后的快速排序:</p>
<p>&nbsp;package&nbsp;org.rut.util.algorithm.support;</p>
<p>&nbsp;import&nbsp;org.rut.util.algorithm.SortUtil;</p>
<p>&nbsp;/**<br>&nbsp;&nbsp;*&nbsp;@author&nbsp;treeroot<br>&nbsp;&nbsp;*&nbsp;@since&nbsp;2006-2-2<br>&nbsp;&nbsp;*&nbsp;@version&nbsp;1.0<br>&nbsp;&nbsp;*/<br>&nbsp;public&nbsp;class&nbsp;ImprovedQuickSort&nbsp;implements&nbsp;SortUtil.Sort&nbsp;{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;int&nbsp;MAX_STACK_SIZE=4096;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;int&nbsp;THRESHOLD=10;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;(non-Javadoc)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@see&nbsp;org.rut.util.algorithm.SortUtil.Sort#sort(int[])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;sort(int[]&nbsp;data)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int[]&nbsp;stack=new&nbsp;int[MAX_STACK_SIZE];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;top=-1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;pivot;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;pivotIndex,l,r;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stack[++top]=0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stack[++top]=data.length-1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(top&gt;0){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;j=stack[top--];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i=stack[top--];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pivotIndex=(i+j)/2;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pivot=data[pivotIndex];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SortUtil.swap(data,pivotIndex,j);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//partition<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l=i-1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r=j;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(data[++l]&lt;pivot);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while((r!=0)&amp;&amp;(data[--r]&gt;pivot));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SortUtil.swap(data,l,r);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(l&lt;r);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SortUtil.swap(data,l,r);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SortUtil.swap(data,l,j);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((l-i)&gt;THRESHOLD){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stack[++top]=i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stack[++top]=l-1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((j-l)&gt;THRESHOLD){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stack[++top]=l+1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stack[++top]=j;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//new&nbsp;InsertSort().sort(data);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insertSort(data);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;data<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;void&nbsp;insertSort(int[]&nbsp;data)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;temp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i=1;i&lt;data.length;i++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;j=i;(j&gt;0)&amp;&amp;(data[j]&lt;data[j-1]);j--){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SortUtil.swap(data,j,j-1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;}</p>
<p>&nbsp;归并排序:</p>
<p>&nbsp;package&nbsp;org.rut.util.algorithm.support;</p>
<p>&nbsp;import&nbsp;org.rut.util.algorithm.SortUtil;</p>
<p>&nbsp;/**<br>&nbsp;&nbsp;*&nbsp;@author&nbsp;treeroot<br>&nbsp;&nbsp;*&nbsp;@since&nbsp;2006-2-2<br>&nbsp;&nbsp;*&nbsp;@version&nbsp;1.0<br>&nbsp;&nbsp;*/<br>&nbsp;public&nbsp;class&nbsp;MergeSort&nbsp;implements&nbsp;SortUtil.Sort{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;(non-Javadoc)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@see&nbsp;org.rut.util.algorithm.SortUtil.Sort#sort(int[])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;sort(int[]&nbsp;data)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int[]&nbsp;temp=new&nbsp;int[data.length];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mergeSort(data,temp,0,data.length-1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;void&nbsp;mergeSort(int[]&nbsp;data,int[]&nbsp;temp,int&nbsp;l,int&nbsp;r){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;mid=(l+r)/2;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(l==r)&nbsp;return&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mergeSort(data,temp,l,mid);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mergeSort(data,temp,mid+1,r);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i=l;i&lt;=r;i++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp[i]=data[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i1=l;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i2=mid+1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;cur=l;cur&lt;=r;cur++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i1==mid+1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data[cur]=temp[i2++];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(i2&gt;r)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data[cur]=temp[i1++];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(temp[i1]&lt;temp[i2])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data[cur]=temp[i1++];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data[cur]=temp[i2++];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;}</p>
<p>&nbsp;改进后的归并排序:</p>
<p>&nbsp;package&nbsp;org.rut.util.algorithm.support;</p>
<p>&nbsp;import&nbsp;org.rut.util.algorithm.SortUtil;</p>
<p>&nbsp;/**<br>&nbsp;&nbsp;*&nbsp;@author&nbsp;treeroot<br>&nbsp;&nbsp;*&nbsp;@since&nbsp;2006-2-2<br>&nbsp;&nbsp;*&nbsp;@version&nbsp;1.0<br>&nbsp;&nbsp;*/<br>&nbsp;public&nbsp;class&nbsp;ImprovedMergeSort&nbsp;implements&nbsp;SortUtil.Sort&nbsp;{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;final&nbsp;int&nbsp;THRESHOLD&nbsp;=&nbsp;10;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;(non-Javadoc)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@see&nbsp;org.rut.util.algorithm.SortUtil.Sort#sort(int[])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;sort(int[]&nbsp;data)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int[]&nbsp;temp=new&nbsp;int[data.length];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mergeSort(data,temp,0,data.length-1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;void&nbsp;mergeSort(int[]&nbsp;data,&nbsp;int[]&nbsp;temp,&nbsp;int&nbsp;l,&nbsp;int&nbsp;r)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i,&nbsp;j,&nbsp;k;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;mid&nbsp;=&nbsp;(l&nbsp;+&nbsp;r)&nbsp;/&nbsp;2;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(l&nbsp;==&nbsp;r)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((mid&nbsp;-&nbsp;l)&nbsp;&gt;=&nbsp;THRESHOLD)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mergeSort(data,&nbsp;temp,&nbsp;l,&nbsp;mid);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insertSort(data,&nbsp;l,&nbsp;mid&nbsp;-&nbsp;l&nbsp;+&nbsp;1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((r&nbsp;-&nbsp;mid)&nbsp;&gt;&nbsp;THRESHOLD)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mergeSort(data,&nbsp;temp,&nbsp;mid&nbsp;+&nbsp;1,&nbsp;r);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insertSort(data,&nbsp;mid&nbsp;+&nbsp;1,&nbsp;r&nbsp;-&nbsp;mid);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i&nbsp;=&nbsp;l;&nbsp;i&nbsp;&lt;=&nbsp;mid;&nbsp;i++)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp[i]&nbsp;=&nbsp;data[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(j&nbsp;=&nbsp;1;&nbsp;j&nbsp;&lt;=&nbsp;r&nbsp;-&nbsp;mid;&nbsp;j++)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp[r&nbsp;-&nbsp;j&nbsp;+&nbsp;1]&nbsp;=&nbsp;data[j&nbsp;+&nbsp;mid];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;a&nbsp;=&nbsp;temp[l];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;b&nbsp;=&nbsp;temp[r];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i&nbsp;=&nbsp;l,&nbsp;j&nbsp;=&nbsp;r,&nbsp;k&nbsp;=&nbsp;l;&nbsp;k&nbsp;&lt;=&nbsp;r;&nbsp;k++)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(a&nbsp;&lt;&nbsp;b)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data[k]&nbsp;=&nbsp;temp[i++];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;temp[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data[k]&nbsp;=&nbsp;temp[j--];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;=&nbsp;temp[j];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;data<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;l<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;i<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;void&nbsp;insertSort(int[]&nbsp;data,&nbsp;int&nbsp;start,&nbsp;int&nbsp;len)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i=start+1;i&lt;start+len;i++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;j=i;(j&gt;start)&nbsp;&amp;&amp;&nbsp;data[j]&lt;data[j-1];j--){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SortUtil.swap(data,j,j-1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;}<br>&nbsp;堆排序:</p>
<p>&nbsp;package&nbsp;org.rut.util.algorithm.support;</p>
<p>&nbsp;import&nbsp;org.rut.util.algorithm.SortUtil;</p>
<p>&nbsp;/**<br>&nbsp;&nbsp;*&nbsp;@author&nbsp;treeroot<br>&nbsp;&nbsp;*&nbsp;@since&nbsp;2006-2-2<br>&nbsp;&nbsp;*&nbsp;@version&nbsp;1.0<br>&nbsp;&nbsp;*/<br>&nbsp;public&nbsp;class&nbsp;HeapSort&nbsp;implements&nbsp;SortUtil.Sort{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;(non-Javadoc)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@see&nbsp;org.rut.util.algorithm.SortUtil.Sort#sort(int[])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;sort(int[]&nbsp;data)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MaxHeap&nbsp;h=new&nbsp;MaxHeap();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h.init(data);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i=0;i&lt;data.length;i++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h.remove();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.arraycopy(h.queue,1,data,0,data.length);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;class&nbsp;MaxHeap{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;init(int[]&nbsp;data){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.queue=new&nbsp;int[data.length+1];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i=0;i&lt;data.length;i++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;queue[++size]=data[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fixUp(size);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;int&nbsp;size=0;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;int[]&nbsp;queue;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;get()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;queue[1];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;remove()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SortUtil.swap(queue,1,size--);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fixDown(1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//fixdown<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;void&nbsp;fixDown(int&nbsp;k)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;j;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;((j&nbsp;=&nbsp;k&nbsp;&lt;&lt;&nbsp;1)&nbsp;&lt;=&nbsp;size)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(j&nbsp;&lt;&nbsp;size&nbsp;&amp;&amp;&nbsp;queue[j]&lt;queue[j+1])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j++;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(queue[k]&gt;queue[j])&nbsp;//不用交换<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SortUtil.swap(queue,j,k);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;=&nbsp;j;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;void&nbsp;fixUp(int&nbsp;k)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(k&nbsp;&gt;&nbsp;1)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;j&nbsp;=&nbsp;k&nbsp;&gt;&gt;&nbsp;1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(queue[j]&gt;queue[k])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SortUtil.swap(queue,j,k);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;=&nbsp;j;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;}</p>
<p>&nbsp;&nbsp;</p>
<p>&nbsp;SortUtil:</p>
<p>&nbsp;package&nbsp;org.rut.util.algorithm;</p>
<p>&nbsp;import&nbsp;org.rut.util.algorithm.support.BubbleSort;<br>&nbsp;import&nbsp;org.rut.util.algorithm.support.HeapSort;<br>&nbsp;import&nbsp;org.rut.util.algorithm.support.ImprovedMergeSort;<br>&nbsp;import&nbsp;org.rut.util.algorithm.support.ImprovedQuickSort;<br>&nbsp;import&nbsp;org.rut.util.algorithm.support.InsertSort;<br>&nbsp;import&nbsp;org.rut.util.algorithm.support.MergeSort;<br>&nbsp;import&nbsp;org.rut.util.algorithm.support.QuickSort;<br>&nbsp;import&nbsp;org.rut.util.algorithm.support.SelectionSort;<br>&nbsp;import&nbsp;org.rut.util.algorithm.support.ShellSort;</p>
<p>&nbsp;/**<br>&nbsp;&nbsp;*&nbsp;@author&nbsp;treeroot<br>&nbsp;&nbsp;*&nbsp;@since&nbsp;2006-2-2<br>&nbsp;&nbsp;*&nbsp;@version&nbsp;1.0<br>&nbsp;&nbsp;*/<br>&nbsp;public&nbsp;class&nbsp;SortUtil&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;final&nbsp;static&nbsp;int&nbsp;INSERT&nbsp;=&nbsp;1;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;final&nbsp;static&nbsp;int&nbsp;BUBBLE&nbsp;=&nbsp;2;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;final&nbsp;static&nbsp;int&nbsp;SELECTION&nbsp;=&nbsp;3;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;final&nbsp;static&nbsp;int&nbsp;SHELL&nbsp;=&nbsp;4;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;final&nbsp;static&nbsp;int&nbsp;QUICK&nbsp;=&nbsp;5;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;final&nbsp;static&nbsp;int&nbsp;IMPROVED_QUICK&nbsp;=&nbsp;6;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;final&nbsp;static&nbsp;int&nbsp;MERGE&nbsp;=&nbsp;7;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;final&nbsp;static&nbsp;int&nbsp;IMPROVED_MERGE&nbsp;=&nbsp;8;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;final&nbsp;static&nbsp;int&nbsp;HEAP&nbsp;=&nbsp;9;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;sort(int[]&nbsp;data)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort(data,&nbsp;IMPROVED_QUICK);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;String[]&nbsp;name={<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"insert","bubble","selection","shell","quick","improved_quick","merge","improved_merge","heap"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;Sort[]&nbsp;impl=new&nbsp;Sort[]{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;InsertSort(),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;BubbleSort(),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;SelectionSort(),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;ShellSort(),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;QuickSort(),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;ImprovedQuickSort(),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;MergeSort(),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;ImprovedMergeSort(),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;HeapSort()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;String&nbsp;toString(int&nbsp;algorithm){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;name[algorithm-1];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;sort(int[]&nbsp;data,&nbsp;int&nbsp;algorithm)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;impl[algorithm-1].sort(data);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;interface&nbsp;Sort&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;sort(int[]&nbsp;data);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;swap(int[]&nbsp;data,&nbsp;int&nbsp;i,&nbsp;int&nbsp;j)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;temp&nbsp;=&nbsp;data[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data[i]&nbsp;=&nbsp;data[j];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data[j]&nbsp;=&nbsp;temp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;}</p>
<img src ="http://www.blogjava.net/willpower88/aggbug/109680.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2007-04-10 17:09 <a href="http://www.blogjava.net/willpower88/archive/2007/04/10/109680.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java调用windows命令</title><link>http://www.blogjava.net/willpower88/archive/2007/03/28/106883.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Wed, 28 Mar 2007 02:32:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2007/03/28/106883.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/106883.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2007/03/28/106883.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/106883.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/106883.html</trackback:ping><description><![CDATA[
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">Runtime r </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> Runtime.getRuntime();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />String strCmd </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">""</span>
				<span style="COLOR: #000000">;<br />    String sFile  = "d:\\aa.txt";<br />    String dFile = "d:\\bk\\";<br /><img id="Codehighlighter1_58_159_Open_Image" onclick="this.style.display='none'; Codehighlighter1_58_159_Open_Text.style.display='none'; Codehighlighter1_58_159_Closed_Image.style.display='inline'; Codehighlighter1_58_159_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_58_159_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_58_159_Closed_Text.style.display='none'; Codehighlighter1_58_159_Open_Image.style.display='inline'; Codehighlighter1_58_159_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span style="COLOR: #0000ff">try</span>
				<span style="COLOR: #000000"> </span>
				<span id="Codehighlighter1_58_159_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_58_159_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            strCmd </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">cmd /C start copy </span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">+</span>
						<span style="COLOR: #000000"> sFile </span>
						<span style="COLOR: #000000">+</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">+</span>
						<span style="COLOR: #000000"> dFile </span>
						<span style="COLOR: #000000">+</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">\n cmd /C exit</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />             r.exec(strCmd);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_182_208_Open_Image" onclick="this.style.display='none'; Codehighlighter1_182_208_Open_Text.style.display='none'; Codehighlighter1_182_208_Closed_Image.style.display='inline'; Codehighlighter1_182_208_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_182_208_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_182_208_Closed_Text.style.display='none'; Codehighlighter1_182_208_Open_Image.style.display='inline'; Codehighlighter1_182_208_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">catch</span>
				<span style="COLOR: #000000">(IOException e) </span>
				<span id="Codehighlighter1_182_208_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_182_208_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />   e.printStackTrace();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
<img src ="http://www.blogjava.net/willpower88/aggbug/106883.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2007-03-28 10:32 <a href="http://www.blogjava.net/willpower88/archive/2007/03/28/106883.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DWR在tomcat5.0.28下配置DWR出错处理</title><link>http://www.blogjava.net/willpower88/archive/2007/03/12/103308.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Mon, 12 Mar 2007 06:11:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2007/03/12/103308.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/103308.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2007/03/12/103308.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/103308.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/103308.html</trackback:ping><description><![CDATA[
		<p>
				<font color="#000000">出现异常如下：<br /><br />javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found<br /><br />解决办法，下载xalan.jar到你的工程里或放在tomcat的commons/lib就可以了：<br /><a href="http://www.ibiblio.org/pub/mirrors/apache/xml/xalan-j"><strong>http://www.ibiblio.org/pub/mirrors/apache/xml/xalan-j</strong></a><br /><br />下载后找xalan.jar</font>
		</p>
<img src ="http://www.blogjava.net/willpower88/aggbug/103308.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2007-03-12 14:11 <a href="http://www.blogjava.net/willpower88/archive/2007/03/12/103308.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DWR在tomcat5.0.28下配置DWR出错处理</title><link>http://www.blogjava.net/willpower88/archive/2007/03/12/103307.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Mon, 12 Mar 2007 06:11:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2007/03/12/103307.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/103307.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2007/03/12/103307.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/103307.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/103307.html</trackback:ping><description><![CDATA[
		<p>
				<font color="#000000">出现异常如下：<br /><br />javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found<br /><br />解决办法，下载xalan.jar到你的工程里或放在tomcat的commons/lib就可以了：<br /><a href="http://www.ibiblio.org/pub/mirrors/apache/xml/xalan-j"><strong>http://www.ibiblio.org/pub/mirrors/apache/xml/xalan-j</strong></a><br /><br />下载后找xalan.jar</font>
		</p>
<img src ="http://www.blogjava.net/willpower88/aggbug/103307.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2007-03-12 14:11 <a href="http://www.blogjava.net/willpower88/archive/2007/03/12/103307.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse atf-0.2.1-v200702271030 windows下安装实践</title><link>http://www.blogjava.net/willpower88/archive/2007/03/08/102611.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Thu, 08 Mar 2007 07:57:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2007/03/08/102611.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/102611.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2007/03/08/102611.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/102611.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/102611.html</trackback:ping><description><![CDATA[
		<font size="2">         ATF（AJAX Toolkit Framework）为 Eclipse 提供 Ajax 支持，其绑定当下最流行的 AJAX 框架（Dojo, Zimbra, Rico, etc），为 Eclipse 提供整合的模块。Eclipse 用户可以使用 AJAX Toolkit Framework 来编写 AJAX 应用程序。就像在 Eclipse 中开发平常的Java 程序一样，非常方便。</font>
		<br /> 一<font size="2">：下载<br /></font><font size="2">1、Eclipse Web Tools Project (WTP) 1.5 (and prerequisites)<br /></font><font size="2"><a href="http://mirrors.gamevil.com/pub/eclipse/webtools/downloads/drops/R1.5/R-1.5.2-200610261841/wtp-all-in-one-sdk-R-1.5.2-200610261841-win32.zip">http://mirrors.gamevil.com/pub/eclipse/webtools/downloads/drops/R1.5/R-1.5.2-200610261841/wtp-all-in-one-sdk-R-1.5.2-200610261841-win32.zip</a></font><font size="2"><br />2、Sun Java 1.4.2 JDK(或更高)<br />3、Tomcat 5 或以上 或其他WTP支持的Http服务器</font><strong><br /></strong><font size="2">4、XULRunner <br /><a href="ftp://ftp.mozilla.org/pub/mozilla.org/xulrunner/nightly/contrib/2007-02-02-1.8.1.2pre/xulrunner-1.8.1.2pre.en-US.win32.zip">ftp://ftp.mozilla.org/pub/mozilla.org/xulrunner/nightly/contrib/2007-02-02-1.8.1.2pre/xulrunner-1.8.1.2pre.en-US.win32.zip</a><br /><br />6、下载ATF<br /><a href="http://mirror.in.th/eclipse/webtools/atf/atf-0.2.1-v200702271030.zip">http://mirror.in.th/eclipse/webtools/atf/atf-0.2.1-v200702271030.zip</a><br /><br />二、安装步骤：<br /><li>卸载以前版本的xulrunner.<br /><font face="Courier New">xulrunner --unregister-global<br /></font><font face="新宋体">xulrunner --unregister-user</font><font size="5">  </font></li><li>使用新的 XULRunner 注册:  <br /><font face="Courier New">xulrunner --register-global<br /></font><font face="新宋体">xulrunner --register-user</font>  </li><li>Eclipse安装ATF<br />打开Eclipse, 选择 Help -&gt; Software Updates -&gt; Find and Install...   <br />选择Search for new features to install   <br />选择 Next   <br />选择 New Archived Site...   <br />选择 the location of the downloaded update site zip file   <br />选择 Finish   <br />选择 install all<br />三、下载ATF插件的资源文件并copy到相应的目录里<br /> </li><li><font size="2">F:\eclipse\plugins\org.eclipse.atf.personality.dojo.runtime_0.2.1.v200702271030\resources<br />     <a href="http://dojotoolkit.org/download"><font size="2"><font color="#800080">http://dojotoolkit.org/download</font></font></a><br />    下载解压后的目录里所有文件copy过去</font></li><li>F:\eclipse\plugins\org.eclipse.atf.personality.rico.runtime_0.2.1.v200702271030\resources<br />     prototype.js 和 rico.js 从这里　<a href="http://openrico.org/rico/downloads.page"><font color="#800080" size="2">http://openrico.org/rico/downloads.page</font></a><br />    将这两个文件copy过去</li><li>F:\eclipse\plugins\org.eclipse.atf.personality.scriptaculous.runtime_1.0.0\resources<br />     <a href="http://script.aculo.us/dist/scriptaculous-js-1.7.0.zip">http://script.aculo.us/dist/scriptaculous-js-1.7.0.zip</a><br />     下载解压后的目录里所有文件copy过去</li><li>F:\eclipse\plugins\org.eclipse.atf.javascript.jslint_0.2.1.v200702271030\resources<br />     <a href="http://www.jslint.com/fulljslint.js"><font color="#800080" size="2">http://www.jslint.com/fulljslint.js</font></a><font size="2">　<br />     将此文件copy过去</font></li><p>四、在开始－－运行里 %eclipse_home%\eclipse -clean即可<br /><br />看懂联系我：MSN：<a href="mailto:cnyqiao@hotmail.com">cnyqiao@hotmail.com</a></p><p> </p><p> </p><p><br /> </p><p> </p></font><font size="2"></font><font size="2"></font><img src ="http://www.blogjava.net/willpower88/aggbug/102611.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2007-03-08 15:57 <a href="http://www.blogjava.net/willpower88/archive/2007/03/08/102611.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java 实现判断某时间是星期几</title><link>http://www.blogjava.net/willpower88/archive/2007/01/23/95548.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Tue, 23 Jan 2007 07:15:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2007/01/23/95548.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/95548.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2007/01/23/95548.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/95548.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/95548.html</trackback:ping><description><![CDATA[
		<div class="diaryContent" id="diary3743250" style="DISPLAY: block">
				<p>首先对SimpleDateFormat有所了解，以下摘自java-doc中</p>
				<p>
				</p>
				<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<span style="COLOR: #000000">Letter  Date or Time Component  Presentation  Examples  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />G  Era designator  Text  AD  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />y  Year  Year  </span>
						<span style="COLOR: #000000">1996</span>
						<span style="COLOR: #000000">; </span>
						<span style="COLOR: #000000">96</span>
						<span style="COLOR: #000000">  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />M  Month in year  Month  July; Jul; </span>
						<span style="COLOR: #000000">07</span>
						<span style="COLOR: #000000">  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />w  Week in year  Number  </span>
						<span style="COLOR: #000000">27</span>
						<span style="COLOR: #000000">  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />W  Week in month  Number  </span>
						<span style="COLOR: #000000">2</span>
						<span style="COLOR: #000000">  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />D  Day in year  Number  </span>
						<span style="COLOR: #000000">189</span>
						<span style="COLOR: #000000">  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />d  Day in month  Number  </span>
						<span style="COLOR: #000000">10</span>
						<span style="COLOR: #000000">  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />F  Day of week in month  Number  </span>
						<span style="COLOR: #000000">2</span>
						<span style="COLOR: #000000">  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />E  Day in week  Text  Tuesday; Tue  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />a  Am</span>
						<span style="COLOR: #000000">/</span>
						<span style="COLOR: #000000">pm marker  Text  PM  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />H  Hour in day (</span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">-</span>
						<span style="COLOR: #000000">23</span>
						<span style="COLOR: #000000">)  Number  </span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />k  Hour in day (</span>
						<span style="COLOR: #000000">1</span>
						<span style="COLOR: #000000">-</span>
						<span style="COLOR: #000000">24</span>
						<span style="COLOR: #000000">)  Number  </span>
						<span style="COLOR: #000000">24</span>
						<span style="COLOR: #000000">  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />K  Hour in am</span>
						<span style="COLOR: #000000">/</span>
						<span style="COLOR: #000000">pm (</span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">-</span>
						<span style="COLOR: #000000">11</span>
						<span style="COLOR: #000000">)  Number  </span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />h  Hour in am</span>
						<span style="COLOR: #000000">/</span>
						<span style="COLOR: #000000">pm (</span>
						<span style="COLOR: #000000">1</span>
						<span style="COLOR: #000000">-</span>
						<span style="COLOR: #000000">12</span>
						<span style="COLOR: #000000">)  Number  </span>
						<span style="COLOR: #000000">12</span>
						<span style="COLOR: #000000">  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />m  Minute in hour  Number  </span>
						<span style="COLOR: #000000">30</span>
						<span style="COLOR: #000000">  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />s  Second in minute  Number  </span>
						<span style="COLOR: #000000">55</span>
						<span style="COLOR: #000000">  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />S  Millisecond  Number  </span>
						<span style="COLOR: #000000">978</span>
						<span style="COLOR: #000000">  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />z  Time zone  General time zone  Pacific Standard Time; PST; GMT</span>
						<span style="COLOR: #000000">-</span>
						<span style="COLOR: #000000">08</span>
						<span style="COLOR: #000000">:</span>
						<span style="COLOR: #000000">00</span>
						<span style="COLOR: #000000">  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />Z  Time zone  RFC </span>
						<span style="COLOR: #000000">822</span>
						<span style="COLOR: #000000"> time zone  </span>
						<span style="COLOR: #000000">-</span>
						<span style="COLOR: #000000">0800</span>
						<span style="COLOR: #000000">  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				</div>
				<p>
						<br />对中国人来说，普遍使用的是"yyyy-MM-dd"。</p>
				<p>贴出代码：</p>
				<p>
				</p>
				<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<span style="COLOR: #0000ff">import</span>
						<span style="COLOR: #000000"> java.util.</span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
						<span style="COLOR: #0000ff">import</span>
						<span style="COLOR: #000000"> java.text.</span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">class</span>
						<span style="COLOR: #000000"> weekDay <br /><img id="Codehighlighter1_62_1008_Open_Image" onclick="this.style.display='none'; Codehighlighter1_62_1008_Open_Text.style.display='none'; Codehighlighter1_62_1008_Closed_Image.style.display='inline'; Codehighlighter1_62_1008_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_62_1008_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_62_1008_Closed_Text.style.display='none'; Codehighlighter1_62_1008_Open_Image.style.display='inline'; Codehighlighter1_62_1008_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
						<span id="Codehighlighter1_62_1008_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_62_1008_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> </span>
								<span style="COLOR: #0000ff">public</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">static</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">void</span>
								<span style="COLOR: #000000"> main(String[] args) <br /><img id="Codehighlighter1_106_1005_Open_Image" onclick="this.style.display='none'; Codehighlighter1_106_1005_Open_Text.style.display='none'; Codehighlighter1_106_1005_Closed_Image.style.display='inline'; Codehighlighter1_106_1005_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_106_1005_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_106_1005_Closed_Text.style.display='none'; Codehighlighter1_106_1005_Open_Image.style.display='inline'; Codehighlighter1_106_1005_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /> </span>
								<span id="Codehighlighter1_106_1005_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_106_1005_Open_Text">
										<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
										<span style="COLOR: #008000">//</span>
										<span style="COLOR: #008000"> ----------------------<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
										<span style="COLOR: #008000">//</span>
										<span style="COLOR: #008000">实现给定某日期，判断是星期几。<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
										<span style="COLOR: #008000">//</span>
										<span style="COLOR: #008000">------------------------</span>
										<span style="COLOR: #008000">
												<br />
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
										</span>
										<span style="COLOR: #000000">  SimpleDateFormat formatYMD </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">new</span>
										<span style="COLOR: #000000"> SimpleDateFormat(</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">yyyy-MM-dd</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
										<span style="COLOR: #008000">//</span>
										<span style="COLOR: #008000">formatYMD表示的是yyyy-MM-dd格式</span>
										<span style="COLOR: #008000">
												<br />
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
										</span>
										<span style="COLOR: #000000">  SimpleDateFormat formatD </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">new</span>
										<span style="COLOR: #000000"> SimpleDateFormat(</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">E</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
										<span style="COLOR: #008000">//</span>
										<span style="COLOR: #008000">"E"表示"day in week"</span>
										<span style="COLOR: #008000">
												<br />
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
										</span>
										<span style="COLOR: #000000">  Date d </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">null</span>
										<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
										<span style="COLOR: #0000ff">try</span>
										<span style="COLOR: #000000">
												<br />
												<img id="Codehighlighter1_386_451_Open_Image" onclick="this.style.display='none'; Codehighlighter1_386_451_Open_Text.style.display='none'; Codehighlighter1_386_451_Closed_Image.style.display='inline'; Codehighlighter1_386_451_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
												<img id="Codehighlighter1_386_451_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_386_451_Closed_Text.style.display='none'; Codehighlighter1_386_451_Open_Image.style.display='inline'; Codehighlighter1_386_451_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span>
										<span id="Codehighlighter1_386_451_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
												<img src="http://www.blogjava.net/images/dot.gif" />
										</span>
										<span id="Codehighlighter1_386_451_Open_Text">
												<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />   d </span>
												<span style="COLOR: #000000">=</span>
												<span style="COLOR: #000000"> formatYMD.parse(</span>
												<span style="COLOR: #000000">"</span>
												<span style="COLOR: #000000">2005-11-8</span>
												<span style="COLOR: #000000">"</span>
												<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />   </span>
												<span style="COLOR: #008000">//</span>
												<span style="COLOR: #008000">将String 转换为符合格式的日期</span>
												<span style="COLOR: #008000">
														<br />
														<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />
												</span>
												<span style="COLOR: #000000">  }</span>
										</span>
										<span style="COLOR: #000000">
												<br />
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
										<span style="COLOR: #0000ff">catch</span>
										<span style="COLOR: #000000">(Exception e)<br /><img id="Codehighlighter1_476_504_Open_Image" onclick="this.style.display='none'; Codehighlighter1_476_504_Open_Text.style.display='none'; Codehighlighter1_476_504_Closed_Image.style.display='inline'; Codehighlighter1_476_504_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_476_504_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_476_504_Closed_Text.style.display='none'; Codehighlighter1_476_504_Open_Image.style.display='inline'; Codehighlighter1_476_504_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span>
										<span id="Codehighlighter1_476_504_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
												<img src="http://www.blogjava.net/images/dot.gif" />
										</span>
										<span id="Codehighlighter1_476_504_Open_Text">
												<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />   e.printStackTrace();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span>
										</span>
										<span style="COLOR: #000000">
												<br />
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  System.out.println(formatD.format(d));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
										<span style="COLOR: #008000">//</span>
										<span style="COLOR: #008000">将日期中的day of week打印<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
										<span style="COLOR: #008000">//</span>
										<span style="COLOR: #008000">---------------------------<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
										<span style="COLOR: #008000">//</span>
										<span style="COLOR: #008000">测试一下一些想法，跟主题无关<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
										<span style="COLOR: #008000">//</span>
										<span style="COLOR: #008000">Date在java.util中Date类<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
										<span style="COLOR: #008000">//</span>
										<span style="COLOR: #008000">原来java中1月用0代表，弄的测了半天<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
										<span style="COLOR: #008000">//</span>
										<span style="COLOR: #008000">---------------------------</span>
										<span style="COLOR: #008000">
												<br />
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
										</span>
										<span style="COLOR: #000000">  Date testDate </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">new</span>
										<span style="COLOR: #000000"> Date();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  SimpleDateFormat format1 </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">new</span>
										<span style="COLOR: #000000"> SimpleDateFormat(</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">yyyy-MM-dd</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  System.out.println(testDate);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  System.out.println(format1.format(testDate));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  System.out.println(testDate.getMonth());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  Calendar cal </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> Calendar.getInstance();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  cal.get(Calendar.MONTH);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> }</span>
								</span>
								<span style="COLOR: #000000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						</span>
				</div>
				<p>
						<br />
				</p>
		</div>
<img src ="http://www.blogjava.net/willpower88/aggbug/95548.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2007-01-23 15:15 <a href="http://www.blogjava.net/willpower88/archive/2007/01/23/95548.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA日期加减运算</title><link>http://www.blogjava.net/willpower88/archive/2006/12/07/86012.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Thu, 07 Dec 2006 01:59:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2006/12/07/86012.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/86012.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2006/12/07/86012.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/86012.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/86012.html</trackback:ping><description><![CDATA[1.用java.util.Calender来实现<br /><div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">Calendar&nbsp;calendar</span><span style="color: #000000">=</span><span style="color: #000000">Calendar.getInstance();&nbsp;&nbsp;&nbsp;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;calendar.setTime(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Date());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;System.out.println(calendar.get(Calendar.DAY_OF_MONTH));</span><span style="color: #008000">//</span><span style="color: #008000">今天的日期&nbsp;</span><span style="color: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;calendar.set(Calendar.DAY_OF_MONTH,calendar.get(Calendar.DAY_OF_MONTH)</span><span style="color: #000000">+</span><span style="color: #000000">1</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">让日期加1&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp; </span><span style="color: #000000">System.out.println(calendar.get(Calendar.DATE));</span><span style="color: #008000">//</span><span style="color: #008000">加1之后的日期Top</span></div><br />2.用java.text.SimpleDateFormat和java.util.Date来实现<br /><br /><div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">Date&nbsp;d</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Date();&nbsp;&nbsp;&nbsp;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SimpleDateFormat&nbsp;df</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SimpleDateFormat(</span><span style="color: #000000">"</span><span style="color: #000000">yyyy-MM-dd</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">今天的日期：</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">df.format(d));&nbsp;&nbsp;&nbsp;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">两天前的日期：</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;df.format(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Date(d.getTime()&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;((long)</span><span style="color: #000000">2</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">24</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">60</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">60</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1000)</span><span style="color: #000000">)));&nbsp;&nbsp;&nbsp;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">三天后的日期：</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;df.format(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Date(d.getTime()&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;((long)</span><span style="color: #000000">3</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">24</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">60</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">60</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1000)</span><span style="color: #000000">)));</span></div><img src ="http://www.blogjava.net/willpower88/aggbug/86012.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2006-12-07 09:59 <a href="http://www.blogjava.net/willpower88/archive/2006/12/07/86012.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java FTP 操作（摘录）</title><link>http://www.blogjava.net/willpower88/archive/2006/11/27/83734.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Mon, 27 Nov 2006 02:57:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2006/11/27/83734.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/83734.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2006/11/27/83734.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/83734.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/83734.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: package				 com.ihandy.shchinamobile.util;				import				 sun.net.ftp.				*				;				import				 sun.net.				*				;				import				 java.io.FileInputStream;				import				 java.io....&nbsp;&nbsp;<a href='http://www.blogjava.net/willpower88/archive/2006/11/27/83734.html'>阅读全文</a><img src ="http://www.blogjava.net/willpower88/aggbug/83734.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2006-11-27 10:57 <a href="http://www.blogjava.net/willpower88/archive/2006/11/27/83734.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java调用linux tail -f</title><link>http://www.blogjava.net/willpower88/archive/2006/11/22/82775.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Wed, 22 Nov 2006 07:09:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2006/11/22/82775.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/82775.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2006/11/22/82775.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/82775.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/82775.html</trackback:ping><description><![CDATA[
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img id="Codehighlighter1_0_61_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_61_Open_Text.style.display='none'; Codehighlighter1_0_61_Closed_Image.style.display='inline'; Codehighlighter1_0_61_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_0_61_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_61_Closed_Text.style.display='none'; Codehighlighter1_0_61_Open_Image.style.display='inline'; Codehighlighter1_0_61_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				<span id="Codehighlighter1_0_61_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/** */</span>
				<span id="Codehighlighter1_0_61_Open_Text">
						<span style="COLOR: #008000">/**</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * </span>
						<span style="COLOR: #808080">@author</span>
						<span style="COLOR: #008000"> cnyqiao@hotmail.com<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * @Date   Nov 22, 2006<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> </span>
						<span style="COLOR: #008000">*/</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> java.io.</span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_104_795_Open_Image" onclick="this.style.display='none'; Codehighlighter1_104_795_Open_Text.style.display='none'; Codehighlighter1_104_795_Closed_Image.style.display='inline'; Codehighlighter1_104_795_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_104_795_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_104_795_Closed_Text.style.display='none'; Codehighlighter1_104_795_Open_Image.style.display='inline'; Codehighlighter1_104_795_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> compiler </span>
				<span id="Codehighlighter1_104_795_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_104_795_Open_Text">
						<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_125_128_Open_Image" onclick="this.style.display='none'; Codehighlighter1_125_128_Open_Text.style.display='none'; Codehighlighter1_125_128_Closed_Image.style.display='inline'; Codehighlighter1_125_128_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_125_128_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_125_128_Closed_Text.style.display='none'; Codehighlighter1_125_128_Open_Image.style.display='inline'; Codehighlighter1_125_128_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> compiler() </span>
						<span id="Codehighlighter1_125_128_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_125_128_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img id="Codehighlighter1_171_793_Open_Image" onclick="this.style.display='none'; Codehighlighter1_171_793_Open_Text.style.display='none'; Codehighlighter1_171_793_Closed_Image.style.display='inline'; Codehighlighter1_171_793_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_171_793_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_171_793_Closed_Text.style.display='none'; Codehighlighter1_171_793_Open_Image.style.display='inline'; Codehighlighter1_171_793_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">static</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> main(String[] args) </span>
						<span id="Codehighlighter1_171_793_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_171_793_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        compiler compiler1 </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">new</span>
								<span style="COLOR: #000000"> compiler();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        Runtime runtime </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> Runtime.getRuntime();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        Process process </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">null</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        String line </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">null</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        InputStream is </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">null</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        InputStreamReader isr </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">null</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        BufferedReader br </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">null</span>
								<span style="COLOR: #000000">;<br /><img id="Codehighlighter1_393_466_Open_Image" onclick="this.style.display='none'; Codehighlighter1_393_466_Open_Text.style.display='none'; Codehighlighter1_393_466_Closed_Image.style.display='inline'; Codehighlighter1_393_466_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_393_466_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_393_466_Closed_Text.style.display='none'; Codehighlighter1_393_466_Open_Image.style.display='inline'; Codehighlighter1_393_466_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">try</span>
								<span style="COLOR: #000000"> </span>
								<span id="Codehighlighter1_393_466_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_393_466_Open_Text">
										<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            process </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> runtime.exec(</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">tail -f submit.2006-11-21.log</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">); </span>
										<span style="COLOR: #008000">//</span>
										<span style="COLOR: #008000"> 关键是这行</span>
										<span style="COLOR: #008000">
												<br />
												<img id="Codehighlighter1_490_520_Open_Image" onclick="this.style.display='none'; Codehighlighter1_490_520_Open_Text.style.display='none'; Codehighlighter1_490_520_Closed_Image.style.display='inline'; Codehighlighter1_490_520_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
												<img id="Codehighlighter1_490_520_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_490_520_Closed_Text.style.display='none'; Codehighlighter1_490_520_Open_Image.style.display='inline'; Codehighlighter1_490_520_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />
										</span>
										<span style="COLOR: #000000">        }</span>
								</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">catch</span>
								<span style="COLOR: #000000"> (IOException e) </span>
								<span id="Codehighlighter1_490_520_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_490_520_Open_Text">
										<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            System.out.println(e);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span>
								</span>
								<span style="COLOR: #000000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        is </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> process.getInputStream();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        isr </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">new</span>
								<span style="COLOR: #000000"> InputStreamReader(is);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        br </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">new</span>
								<span style="COLOR: #000000"> BufferedReader(isr);<br /><img id="Codehighlighter1_628_711_Open_Image" onclick="this.style.display='none'; Codehighlighter1_628_711_Open_Text.style.display='none'; Codehighlighter1_628_711_Closed_Image.style.display='inline'; Codehighlighter1_628_711_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_628_711_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_628_711_Closed_Text.style.display='none'; Codehighlighter1_628_711_Open_Image.style.display='inline'; Codehighlighter1_628_711_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">try</span>
								<span style="COLOR: #000000"> </span>
								<span id="Codehighlighter1_628_711_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_628_711_Open_Text">
										<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_672_707_Open_Image" onclick="this.style.display='none'; Codehighlighter1_672_707_Open_Text.style.display='none'; Codehighlighter1_672_707_Closed_Image.style.display='inline'; Codehighlighter1_672_707_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_672_707_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_672_707_Closed_Text.style.display='none'; Codehighlighter1_672_707_Open_Image.style.display='inline'; Codehighlighter1_672_707_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span>
										<span style="COLOR: #0000ff">while</span>
										<span style="COLOR: #000000"> ((line </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> br.readLine()) </span>
										<span style="COLOR: #000000">!=</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">null</span>
										<span style="COLOR: #000000">) </span>
										<span id="Codehighlighter1_672_707_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
												<img src="http://www.blogjava.net/images/dot.gif" />
										</span>
										<span id="Codehighlighter1_672_707_Open_Text">
												<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                System.out.println(line);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />            }</span>
										</span>
										<span style="COLOR: #000000">
												<br />
												<img id="Codehighlighter1_735_789_Open_Image" onclick="this.style.display='none'; Codehighlighter1_735_789_Open_Text.style.display='none'; Codehighlighter1_735_789_Closed_Image.style.display='inline'; Codehighlighter1_735_789_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
												<img id="Codehighlighter1_735_789_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_735_789_Closed_Text.style.display='none'; Codehighlighter1_735_789_Open_Image.style.display='inline'; Codehighlighter1_735_789_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        }</span>
								</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">catch</span>
								<span style="COLOR: #000000"> (IOException e) </span>
								<span id="Codehighlighter1_735_789_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_735_789_Open_Text">
										<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            System.out.println(e);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            e.printStackTrace();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span>
								</span>
								<span style="COLOR: #000000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>
<img src ="http://www.blogjava.net/willpower88/aggbug/82775.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2006-11-22 15:09 <a href="http://www.blogjava.net/willpower88/archive/2006/11/22/82775.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java读写图片文件的两种方法</title><link>http://www.blogjava.net/willpower88/archive/2006/07/05/56797.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Wed, 05 Jul 2006 08:21:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2006/07/05/56797.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/56797.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2006/07/05/56797.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/56797.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/56797.html</trackback:ping><description><![CDATA[1.使用FileInputStream和FileOutputStream，代码如下：sFlieName和tFileName分别为源文件（带路径）和目标文件（带路径）<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id="Codehighlighter1_4_410_Open_Image" onclick="this.style.display='none'; Codehighlighter1_4_410_Open_Text.style.display='none'; Codehighlighter1_4_410_Closed_Image.style.display='inline'; Codehighlighter1_4_410_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_4_410_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_4_410_Closed_Text.style.display='none'; Codehighlighter1_4_410_Open_Image.style.display='inline'; Codehighlighter1_4_410_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_4_410_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_4_410_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Save as File</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    FileInputStream input </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> FileInputStream(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> File(<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            sFileName));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    FileOutputStream output </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> FileOutputStream(<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> File(tFileName));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> b;<br /><img id="Codehighlighter1_190_364_Open_Image" onclick="this.style.display='none'; Codehighlighter1_190_364_Open_Text.style.display='none'; Codehighlighter1_190_364_Closed_Image.style.display='inline'; Codehighlighter1_190_364_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_190_364_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_190_364_Closed_Text.style.display='none'; Codehighlighter1_190_364_Open_Image.style.display='inline'; Codehighlighter1_190_364_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">) </span><span id="Codehighlighter1_190_364_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_190_364_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_224_302_Open_Image" onclick="this.style.display='none'; Codehighlighter1_224_302_Open_Text.style.display='none'; Codehighlighter1_224_302_Closed_Image.style.display='inline'; Codehighlighter1_224_302_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_224_302_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_224_302_Closed_Text.style.display='none'; Codehighlighter1_224_302_Open_Image.style.display='inline'; Codehighlighter1_224_302_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (input.available() </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1024</span><span style="COLOR: #000000">) </span><span id="Codehighlighter1_224_302_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_224_302_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_262_288_Open_Image" onclick="this.style.display='none'; Codehighlighter1_262_288_Open_Text.style.display='none'; Codehighlighter1_262_288_Closed_Image.style.display='inline'; Codehighlighter1_262_288_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_262_288_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_262_288_Closed_Text.style.display='none'; Codehighlighter1_262_288_Open_Image.style.display='inline'; Codehighlighter1_262_288_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000"> ((b </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> input.read()) </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">) </span><span id="Codehighlighter1_262_288_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_262_288_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                output.write(b);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />            }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br /><img id="Codehighlighter1_309_361_Open_Image" onclick="this.style.display='none'; Codehighlighter1_309_361_Open_Text.style.display='none'; Codehighlighter1_309_361_Closed_Image.style.display='inline'; Codehighlighter1_309_361_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_309_361_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_309_361_Closed_Text.style.display='none'; Codehighlighter1_309_361_Open_Image.style.display='inline'; Codehighlighter1_309_361_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        }</span></span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_309_361_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_309_361_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            input.read(buffer);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            output.write(buffer);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    input.close();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    output.close();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">continue</span><span style="COLOR: #000000">;<br /><img id="Codehighlighter1_444_468_Open_Image" onclick="this.style.display='none'; Codehighlighter1_444_468_Open_Text.style.display='none'; Codehighlighter1_444_468_Closed_Image.style.display='inline'; Codehighlighter1_444_468_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_444_468_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_444_468_Closed_Text.style.display='none'; Codehighlighter1_444_468_Open_Image.style.display='inline'; Codehighlighter1_444_468_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />}</span></span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (FileNotFoundException e) </span><span id="Codehighlighter1_444_468_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_444_468_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    e.printStackTrace();<br /><img id="Codehighlighter1_492_516_Open_Image" onclick="this.style.display='none'; Codehighlighter1_492_516_Open_Text.style.display='none'; Codehighlighter1_492_516_Closed_Image.style.display='inline'; Codehighlighter1_492_516_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_492_516_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_492_516_Closed_Text.style.display='none'; Codehighlighter1_492_516_Open_Image.style.display='inline'; Codehighlighter1_492_516_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />}</span></span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (IOException e) </span><span id="Codehighlighter1_492_516_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_492_516_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    e.printStackTrace();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>2.使用FileChennal，本人认为这种方法在文件移动，不做别的处理时很好用，又好看，哈哈，特别是它的transferTo（），很棒啊，想了解看文档啊，sFileName和tFileName同上<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id="Codehighlighter1_4_374_Open_Image" onclick="this.style.display='none'; Codehighlighter1_4_374_Open_Text.style.display='none'; Codehighlighter1_4_374_Closed_Image.style.display='inline'; Codehighlighter1_4_374_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_4_374_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_4_374_Closed_Text.style.display='none'; Codehighlighter1_4_374_Open_Image.style.display='inline'; Codehighlighter1_4_374_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_4_374_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_4_374_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Save as File</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    FileInputStream input </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> FileInputStream(sFileName);                    <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    FileOutputStream output </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> FileOutputStream(tFileName);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    FileChannel infileChannel </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> input.getChannel();   <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    FileChannel outfileChannel </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> output.getChannel();   <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000"> size </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> infileChannel.size();   <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    infileChannel.transferTo(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, size, (WritableByteChannel)outfileChannel);    <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">continue</span><span style="COLOR: #000000">;<br /><img id="Codehighlighter1_408_432_Open_Image" onclick="this.style.display='none'; Codehighlighter1_408_432_Open_Text.style.display='none'; Codehighlighter1_408_432_Closed_Image.style.display='inline'; Codehighlighter1_408_432_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_408_432_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_408_432_Closed_Text.style.display='none'; Codehighlighter1_408_432_Open_Image.style.display='inline'; Codehighlighter1_408_432_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />}</span></span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (FileNotFoundException e) </span><span id="Codehighlighter1_408_432_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_408_432_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    e.printStackTrace();<br /><img id="Codehighlighter1_456_480_Open_Image" onclick="this.style.display='none'; Codehighlighter1_456_480_Open_Text.style.display='none'; Codehighlighter1_456_480_Closed_Image.style.display='inline'; Codehighlighter1_456_480_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_456_480_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_456_480_Closed_Text.style.display='none'; Codehighlighter1_456_480_Open_Image.style.display='inline'; Codehighlighter1_456_480_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />}</span></span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (IOException e) </span><span id="Codehighlighter1_456_480_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_456_480_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    e.printStackTrace();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br /><img src ="http://www.blogjava.net/willpower88/aggbug/56797.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2006-07-05 16:21 <a href="http://www.blogjava.net/willpower88/archive/2006/07/05/56797.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java中判断字符串是否为数字的两种方法 </title><link>http://www.blogjava.net/willpower88/archive/2006/07/03/56361.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Mon, 03 Jul 2006 07:58:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2006/07/03/56361.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/56361.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2006/07/03/56361.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/56361.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/56361.html</trackback:ping><description><![CDATA[
		<div class="postTitle">1用JAVA自带的函数<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">boolean</span><span style="COLOR: #000000"> isNumeric(String str){<br />  </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> i </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">; i </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"> str.length(); i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br />   System.out.println(str.charAt(i));<br />   </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">Character.isDigit(str.charAt(i))){<br />    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br />   }<br />  }<br />  </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br /> }</span></div></div><br />2用正则表达式<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">boolean</span><span style="COLOR: #000000"> isNumeric(String str){ <br />   Pattern pattern </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> Pattern.compile(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">[0-9]*</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">); <br />   Matcher isNum </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> pattern.matcher(str);<br />   </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">( </span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">isNum.matches() ){<br />       </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">; <br />   } <br />   </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">; <br />} </span></div></div></div>
<img src ="http://www.blogjava.net/willpower88/aggbug/56361.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2006-07-03 15:58 <a href="http://www.blogjava.net/willpower88/archive/2006/07/03/56361.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA字符串分页</title><link>http://www.blogjava.net/willpower88/archive/2006/02/28/32887.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Tue, 28 Feb 2006 10:37:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2006/02/28/32887.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/32887.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2006/02/28/32887.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/32887.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/32887.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: StringPagination类代码为：package&nbsp;example;public&nbsp;class&nbsp;StringPagination&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;*//**&nbsp;当前页码数&nbsp;*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp...&nbsp;&nbsp;<a href='http://www.blogjava.net/willpower88/archive/2006/02/28/32887.html'>阅读全文</a><img src ="http://www.blogjava.net/willpower88/aggbug/32887.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2006-02-28 18:37 <a href="http://www.blogjava.net/willpower88/archive/2006/02/28/32887.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>