<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>枫叶</title>
    <description></description>
    <link>http://kong-kong.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>压缩图片分辨率</title>
        <author>kong6001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kong-kong.javaeye.com">kong6001</a>&nbsp;
          链接：<a href="http://kong-kong.javaeye.com/blog/237871" style="color:red;">http://kong-kong.javaeye.com/blog/237871</a>&nbsp;
          发表时间: 2008年09月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">public class CompressImage {
	private static final Log log = LogFactory.getLog(CompressImage.class);

	private int destWidth;// 压缩后的长
	private int destHeight;// 压缩后的高

	/**
	 * 指定压缩后的长度，按比例计算出压缩后的高度
	 * 
	 * @param width
	 */
	public CompressImage(int width) {
		this.destWidth = width;

	}

	/**
	 * 指定压缩后的长度和高度
	 * 
	 * @param width
	 * @param height
	 */
	public CompressImage(int width, int height) {
		this.destHeight = height;
		this.destWidth = width;

	}

	// 根据长度计算出高度
	private int getHeight(int width, int height)  	{

		if (width &gt; destWidth) {
			float scale;// 计算原图比例
			scale = (float) width / (float) destWidth;
			float hh = height / scale;
			return (int) hh;
		} else {
			this.destWidth = width;
			return height;
		}

	}

	/**
	 * 压缩图片分辨率
	 * 
	 * @param srcPath
	 * @param destPath
	 * @throws Exception
	 */
	public void compress(String srcPath, String destPath) {
		try {
			File _file = new File(srcPath);
			log.debug("SrcImagePath：" + _file.getAbsolutePath());
			Image src = javax.imageio.ImageIO.read(_file);
			int wideth = src.getWidth(null);// 获得图片长

			int height = src.getHeight(null);// 获得图片高度
			log.debug("StrImage：" + wideth + "*" + height);
			int htagHeight = this.destHeight == 0 ? this.getHeight(wideth,
					height) : this.destHeight;
			BufferedImage tag = new BufferedImage(this.destWidth, htagHeight,
					BufferedImage.TYPE_INT_RGB);
			Graphics g = tag.getGraphics();
			g.drawImage(src, 0, 0, this.destWidth, htagHeight, null);
			// if (t != null) {// 在底部图片上写文字
			// g.setColor(new Color(242, 242, 242));
			// g.fillRect(this.getWideth() - 120, htagHeight - 18, 120, 18);
			// g.setColor(new Color(180, 180, 180));
			// g.drawRect(this.getWideth() - 120, htagHeight - 18, 119, 17);
			// g.setColor(new Color(255, 102, 0));
			// g.drawString(t, this.getWideth() - 100, htagHeight - 5);
			// }
			log.debug("DestImagePath：" + _file.getAbsolutePath());
			log.debug("DestImage：" + tag.getWidth() + "*" + tag.getHeight());
			FileOutputStream out = new FileOutputStream(destPath);
			JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
			encoder.encode(tag);
			out.close();

		} catch (Exception e) {
			log.error("Compress Image [" + srcPath + "] error！！\r\n" + e);

		}
	}

}</pre>
<p>&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://kong-kong.javaeye.com/blog/237871#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 06 Sep 2008 11:51:15 +0800</pubDate>
        <link>http://kong-kong.javaeye.com/blog/237871</link>
        <guid>http://kong-kong.javaeye.com/blog/237871</guid>
      </item>
      <item>
        <title>Jboss使用数据源</title>
        <author>kong6001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kong-kong.javaeye.com">kong6001</a>&nbsp;
          链接：<a href="http://kong-kong.javaeye.com/blog/207494" style="color:red;">http://kong-kong.javaeye.com/blog/207494</a>&nbsp;
          发表时间: 2008年06月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong>1、配置数据源文件</strong> <br />数据源必需以 **-ds.xml作为文件名，并放在server\default\deploy下，不同数据库配置不同，可参考\docs\examples\jca下的数据源配置 <br /><br />下面配置多个数据源例子：</p>
<pre name="code" class="xml">&lt;?xml version="1.0" encoding="GBK"?&gt;

&lt;!-- ===================================================================== --&gt;
&lt;!--                                                                       --&gt;
&lt;!--  JBoss Server Configuration                                           --&gt;
&lt;!--                                                                       --&gt;
&lt;!-- ===================================================================== --&gt;

&lt;!-- $Id: mssql-ds.xml 63175 2007-05-21 16:26:06Z rrajesh $ --&gt;

  &lt;!-- ======================================================================--&gt;
  &lt;!-- New ConnectionManager setup for Microsoft SQL Server 2005  driver     --&gt;
  &lt;!-- Further information about the Microsoft JDBC Driver version 1.1      --&gt;
  &lt;!-- can be found here:                                                   --&gt;
  &lt;!-- http://msdn2.microsoft.com/en-us/library/aa496082.aspx               --&gt;
  &lt;!-- ===================================================================== --&gt;

&lt;datasources&gt;
&lt;!--网络电话本数据源 Mysql--&gt;
  &lt;local-tx-datasource&gt;
    &lt;jndi-name&gt;jdbc/aurora_contact_web&lt;/jndi-name&gt;
    &lt;connection-url&gt;jdbc:mysql://192.168.1.166/aurora_contact_web?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=utf-8&lt;/connection-url&gt;
    &lt;driver-class&gt;com.mysql.jdbc.Driver&lt;/driver-class&gt;
    &lt;user-name&gt;app&lt;/user-name&gt;
    &lt;password&gt;app&lt;/password&gt;
        &lt;!-- sql to call when connection is created
        &lt;new-connection-sql&gt;some arbitrary sql&lt;/new-connection-sql&gt;
        --&gt;

        &lt;!-- sql to call on an existing pooled connection when it is obtained from pool
        &lt;check-valid-connection-sql&gt;some arbitrary sql&lt;/check-valid-connection-sql&gt;
        --&gt;

      &lt;!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml --&gt;
      &lt;metadata&gt;
         &lt;type-mapping&gt;mysql&lt;/type-mapping&gt;
      &lt;/metadata&gt;
  &lt;/local-tx-datasource&gt;

  &lt;!--Aurora 数据源 Postgres--&gt;

     &lt;local-tx-datasource&gt;
    &lt;jndi-name&gt;jdbc/aurora&lt;/jndi-name&gt;
    &lt;connection-url&gt;jdbc:postgresql://localhost/aurora?useUnicode=true&amp;characterEncoding=utf-8"&lt;/connection-url&gt;
    &lt;driver-class&gt;org.postgresql.Driver&lt;/driver-class&gt;
    &lt;user-name&gt;admin&lt;/user-name&gt;
    &lt;password&gt;admin&lt;/password&gt;
        &lt;!-- sql to call when connection is created
        &lt;new-connection-sql&gt;some arbitrary sql&lt;/new-connection-sql&gt;
        --&gt;

        &lt;!-- sql to call on an existing pooled connection when it is obtained from pool
        &lt;check-valid-connection-sql&gt;some arbitrary sql&lt;/check-valid-connection-sql&gt;
        --&gt;

      &lt;!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml --&gt;
      &lt;metadata&gt;
         &lt;type-mapping&gt;PostgreSQL&lt;/type-mapping&gt;
      &lt;/metadata&gt;
  &lt;/local-tx-datasource&gt;

&lt;/datasources&gt;</pre>
<p>&nbsp;<br /><br /><br /><strong>2、配置jboss-web.xml</strong> <br />该文件为jboss特有文件，Tomcat应用需在WEB-INF中加入该文件，其作用与context.xml类似&nbsp;<br /><br />&nbsp;</p>
<pre name="code" class="xml">&lt;?xml version="1.0" encoding="GBK"?&gt;
&lt;!DOCTYPE jboss-web
    PUBLIC "-//JBoss//DTD Web Application 2.3V2//EN"
    "http://www.jboss.org/j2ee/dtd/jboss-web_3_2.dtd"&gt;
&lt;jboss-web&gt;
&lt;!--配置jaas的jndi--&gt;
&lt;!--&lt;security-domain&gt;java:/jaas/DefaultLogin&lt;/security-domain&gt;   --&gt;
&lt;!-- 配置jndi方式 --&gt;
&lt;resource-ref&gt;
&lt;!-- 取这个名字要和web.xml中对应起来 --&gt;
&lt;res-ref-name&gt;jdbc/aurora_contact_web&lt;/res-ref-name&gt;
&lt;!-- 数据方式 --&gt;
&lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt;
&lt;!-- 这个名字是和 aurora-ds.xml中的jndi-name对应着，不同的就是多加了一个java:/,这是个规范 --&gt;
&lt;jndi-name&gt;java:/jdbc/aurora_contact_web&lt;/jndi-name&gt;
&lt;/resource-ref&gt;
&lt;/jboss-web&gt;</pre>
<p>&nbsp;<br />3、web.xml</p>
<pre name="code" class="xml">&lt;resource-ref&gt; 
&lt;description&gt; &lt;/description&gt; 
&lt;res-ref-name&gt;jdbc/aurora_contact_web&lt;/res-ref-name&gt;&lt;!--与jboss-web.xml对应--&gt; 
&lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt; 
&lt;res-auth&gt;Container&lt;/res-auth&gt; 
&lt;/resource-ref&gt; </pre>
<p>&nbsp;<br />4、应用使用数据源</p>
<pre name="code" class="xml">&lt;jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/aurora_contact_web"/&gt;</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://kong-kong.javaeye.com/blog/207494#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 24 Jun 2008 14:49:38 +0800</pubDate>
        <link>http://kong-kong.javaeye.com/blog/207494</link>
        <guid>http://kong-kong.javaeye.com/blog/207494</guid>
      </item>
      <item>
        <title>随机选择数据库某几行</title>
        <author>kong6001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kong-kong.javaeye.com">kong6001</a>&nbsp;
          链接：<a href="http://kong-kong.javaeye.com/blog/195511" style="color:red;">http://kong-kong.javaeye.com/blog/195511</a>&nbsp;
          发表时间: 2008年05月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          SQL to Select a random row from a database table<br />来源：<br />http://www.petefreitag.com/item/466.cfm<br /><br />There are lots of ways to select a random record or row from a database table. Here are some example SQL statements that don't require additional application logic, but each database server requires different SQL syntax.<br /><br />Select a random row with MySQL:<br />Select column FROM table<br />orDER BY RAND()<br />LIMIT 1<br />Select a random row with PostgreSQL:<br />Select column FROM table<br />orDER BY RANDOM()<br />LIMIT 1<br />Select a random row with Microsoft SQL Server:<br />Select TOP 1 column FROM table<br />orDER BY NEWID()<br />Select a random row with IBM DB2<br />Select column, RAND() as IDX <br />FROM table <br />orDER BY IDX FETCH FIRST 1 ROWS ONLY<br />Thanks Tim<br /><br />Select a random record with oracle:<br />Select column FROM<br />( Select column FROM table<br />orDER BY dbms_random.value )<br />Where rownum = 1
          <br/><br/>
          <span style="color:red;">
            <a href="http://kong-kong.javaeye.com/blog/195511#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 22 May 2008 09:49:15 +0800</pubDate>
        <link>http://kong-kong.javaeye.com/blog/195511</link>
        <guid>http://kong-kong.javaeye.com/blog/195511</guid>
      </item>
      <item>
        <title>Spring 配置数据源JNDI引用</title>
        <author>kong6001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kong-kong.javaeye.com">kong6001</a>&nbsp;
          链接：<a href="http://kong-kong.javaeye.com/blog/194782" style="color:red;">http://kong-kong.javaeye.com/blog/194782</a>&nbsp;
          发表时间: 2008年05月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Spring 配置数据源JNDI引用<br /><pre name="code" class="XML">
    &lt;bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
        &lt;property name="jndiName">&lt;value>java:comp/env/jdbc/aurora_contact_web&lt;/value>&lt;/property>
    &lt;/bean> 
</pre><br />或者<br /><pre name="code" class="XML">
  &lt;jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/aurora"/> 
</pre>
          <br/><br/>
          <span style="color:red;">
            <a href="http://kong-kong.javaeye.com/blog/194782#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 20 May 2008 12:42:12 +0800</pubDate>
        <link>http://kong-kong.javaeye.com/blog/194782</link>
        <guid>http://kong-kong.javaeye.com/blog/194782</guid>
      </item>
      <item>
        <title>Client如何访问Glassfish 提供的远程EJB </title>
        <author>kong6001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kong-kong.javaeye.com">kong6001</a>&nbsp;
          链接：<a href="http://kong-kong.javaeye.com/blog/190636" style="color:red;">http://kong-kong.javaeye.com/blog/190636</a>&nbsp;
          发表时间: 2008年05月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <strong>EJB所有返回值必须实现 Serializable接口，否则会报些莫名其妙的错误.<br />并把 Glassfish 的 appserv-rt.jar 和 javaee.jar 包 客户程序的类路径</strong><br /><pre name="code" class="java">
@Stateless(mappedName="ejb/MainActionJNDI")//远程JNDI
@Name("MainAction")

@Interceptors({org.jboss.seam.ejb.SeamInterceptor.class})
@AutoCreate
public class MainActionBean implements MainAction,MainActionRemote {

</pre><br /><br /><pre name="code" class="java">
package cn.astrocom.ejb.client;

import java.util.List;
import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;

import cn.astrocom.extseam.MainActionRemote;
import cn.astrocom.extseam.bo.MainGrid;

/**
 *
 * @author fanzhi_kong
 *
 */
public class MainActionClient {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		 
		try {
			Context jndiContext = getInitialJNDIFileContext();
			// Context jndiContext = getInitialPropertiesContext();
			/*
			 * 2.0 Object ref = jndiContext.lookup("ejb/MainActionJNDI");
			 * MainActionRemote mainAction = (MainActionRemote)
			 * PortableRemoteObject .narrow(ref, MainActionRemote.class);
			 */
			// 3.0
			MainActionRemote mainAction = (MainActionRemote) jndiContext
					.lookup("ejb/MainActionJNDI");
 
		} catch (Exception ne) {
			ne.printStackTrace();
		}

	}

	// JNDI上下文 方式一
	public static Context getInitialPropertiesContext()
			throws javax.naming.NamingException {

		Properties props = new Properties();
		props.setProperty("java.naming.factory.initial",
				"com.sun.enterprise.naming.SerialInitContextFactory");
		props.setProperty("java.naming.factory.url.pkgs",
				"com.sun.enterprise.naming");
		props.setProperty("java.naming.factory.state",
				"com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");

	    //EJB容器的ip
		props.setProperty("org.omg.CORBA.ORBInitialHost", "172.16.140.103");

       //EJB容器端口,默认为：3700
		props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");

		InitialContext ic = new InitialContext(props);

		return ic;
	}

	/**
	 * JNDI上下文 方式二读配置文件 文件为：jndi.properties
	 *
	 * @return
	 * @throws javax.naming.NamingException
	 */
	public static Context getInitialJNDIFileContext()
			throws javax.naming.NamingException {

		return new InitialContext();

	}

}
</pre><br /><pre name="code" class="java">
# optional. Defaults to localhost. Only needed if web server is running
# on a different host than the appserver
org.omg.CORBA.ORBInitialHost=172.16.140.103

# optional. Defaults to 3700. Only needed if target orb port is not
# 3700.
org.omg.CORBA.ORBInitialPort=3700


java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory
java.naming.factory.url.pkgs=com.sun.enterprise.naming
java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl
</pre>
          <br/><br/>
          <span style="color:red;">
            <a href="http://kong-kong.javaeye.com/blog/190636#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 07 May 2008 16:22:19 +0800</pubDate>
        <link>http://kong-kong.javaeye.com/blog/190636</link>
        <guid>http://kong-kong.javaeye.com/blog/190636</guid>
      </item>
      <item>
        <title>System.out输出重定向</title>
        <author>kong6001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kong-kong.javaeye.com">kong6001</a>&nbsp;
          链接：<a href="http://kong-kong.javaeye.com/blog/180401" style="color:red;">http://kong-kong.javaeye.com/blog/180401</a>&nbsp;
          发表时间: 2008年04月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          dom4j格式化输出为String作例子<br /><pre name="code" class="java">
	/**
	 * 打印文档，String输出
	 * 
	 * @param doc
	 * @param encoding
	 */
	public static String printString(Document doc, String encoding) {
		if (encoding == null)// 默认为UTF-8编码
		{
			encoding = "UTF-8";
		}
		String docStr = null;
		OutputFormat format = OutputFormat.createPrettyPrint();
		format.setEncoding(encoding);
		PrintStream defaultOut = System.out;// 保存原来的sysout
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		System.setOut(new PrintStream(out)); // 重定向sysout

		XMLWriter systemWriter;
		try {
			systemWriter = new XMLWriter(System.out, format);
			systemWriter.write(doc);

			systemWriter.close();

			// 屏幕输出
			System.setOut(defaultOut); // 恢复原来的sysout
			docStr = new String(out.toByteArray(), encoding);// 生成String串

		} catch (UnsupportedEncodingException e) {
			System.err.println(e);
		} catch (IOException e) {
			System.err.println(e);
		}
		return docStr;
	}</pre>
          <br/><br/>
          <span style="color:red;">
            <a href="http://kong-kong.javaeye.com/blog/180401#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 08 Apr 2008 11:43:39 +0800</pubDate>
        <link>http://kong-kong.javaeye.com/blog/180401</link>
        <guid>http://kong-kong.javaeye.com/blog/180401</guid>
      </item>
      <item>
        <title>tomcat系统服务</title>
        <author>kong6001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kong-kong.javaeye.com">kong6001</a>&nbsp;
          链接：<a href="http://kong-kong.javaeye.com/blog/172972" style="color:red;">http://kong-kong.javaeye.com/blog/172972</a>&nbsp;
          发表时间: 2008年03月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          下载的zip版的tomcat要注册为windows系统服务就要运行bin/service.bat<br /> <br /><br />加载系统服务为<br />service install tomcat6<br />卸载系统服务为<br />service remove tomcat6<br /><br />可以对service.bat文件做一些其他修改，使tomcat更加能满足我们各种不同需求时的要求<br /><br />1. 如果让tomcat编译jsp文件，就在PR_CLASSPATH中加入J2SDK的tools.jar<br />修改前：<br />set PR_CLASSPATH=%CATALINA_HOME%\bin\bootstrap.jar<br />修改后：<br />set PR_CLASSPATH=%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\bin\bootstrap.jar <br /><br />2.要使用一个特定的JVM，就要修改jvm的参数；要使注册的windows服务的启动方式为自动，增加--Startup Automatic，这个是比较常用的；要用定制的server.xml配置文件并且传递多个参数给StartClass，要修改StartParams的值，各个值之间用分号分隔：<br />修改前：<br />"%EXECUTABLE%" //IS//%SERVICE_NAME% --Jvm auto <br />--StartClass org.apache.catalina.startup.Bootstrap --StopClass org.apache.catalina.startup.Bootstrap <br />--StartParams start --StopParams stop<br />修改后： 添加--Startup Automatic参数到最后<br />"%EXECUTABLE%" //IS//%SERVICE_NAME% --Jvm "%JAVA_HOME%\jre\bin\server\jvm.dll" <br />--StartClass org.apache.catalina.startup.Bootstrap --StopClass org.apache.catalina.startup.Bootstrap <br />--StartParams "-config;%CUSTOM_SERVERXML_FILE%;-nonaming;start" --StopParams stop<br />--Startup Automatic<br /><br />3. 指定最大和最小的内存限制，要增加jvm的初始参数<br />修改前：<br />"%EXECUTABLE%" //US//%SERVICE_NAME% --JvmOptions <br />"-Dcatalina.base=%CATALINA_BASE%;-Dcatalina.home=%CATALINA_HOME%;-Djava.endorsed.dirs=%CATALINA_HOME%\common\endorsed" <br />--StartMode jvm --StopMode jvm<br /><br />修改后：<br />设定虚拟内存大小和堆大小和内存回收策略，注意参数间使用分号间开，<br />添加-Xms1024M;-Xmx1024M;-XX:NewRatio=3;-XX:PermSize=200M;-XX:MaxPermSize=299M; <br />"%EXECUTABLE%" //US//%SERVICE_NAME% --JvmOptions <br />"-Xms1024M;-Xmx1024M;-XX:NewRatio=3;-XX:PermSize=200M;-XX:MaxPermSize=299M;-Dcatalina.base=%CATALINA_BASE%;-Dcatalina.home=%CATALINA_HOME%;-Djava.endorsed.dirs=%CATALINA_HOME%\common\endorsed" <br />--StartMode jvm --StopMode jvm<br /><br />4.有时注册windows服务成功后，但是启动服务时显示“发生服务特定错误: 0.”<br />就是因为jvm没有指定，修改Jvm auto为Jvm "%JAVA_HOME%\jre\bin\server\jvm.dll"后重新注册windows服务就可以启动了。<br /><br /><pre name="code" class="java">
@echo off
if "%OS%" == "Windows_NT" setlocal
rem ---------------------------------------------------------------------------
rem NT Service Install/Uninstall script
rem
rem Options
rem install                Install the service using Tomcat5 as service name.
rem                        Service is installed using default settings.
rem remove                 Remove the service from the System.
rem
rem name        (optional) If the second argument is present it is considered
rem                        to be new service name                                           
rem
rem $Id: service.bat 467182 2006-10-23 23:47:06Z markt $
rem ---------------------------------------------------------------------------

rem Guess CATALINA_HOME if not defined
set CURRENT_DIR=%cd%
if not "%CATALINA_HOME%" == "" goto gotHome
set CATALINA_HOME=%cd%
if exist "%CATALINA_HOME%\bin\tomcat6.exe" goto okHome
rem CD to the upper dir
cd ..
set CATALINA_HOME=%cd%
:gotHome
if exist "%CATALINA_HOME%\bin\tomcat6.exe" goto okHome
echo The tomcat.exe was not found...
echo The CATALINA_HOME environment variable is not defined correctly.
echo This environment variable is needed to run this program
goto end
rem Make sure prerequisite environment variables are set
if not "%JAVA_HOME%" == "" goto okHome
echo The JAVA_HOME environment variable is not defined
echo This environment variable is needed to run this program
goto end 
:okHome
if not "%CATALINA_BASE%" == "" goto gotBase
set CATALINA_BASE=%CATALINA_HOME%
:gotBase
 
set EXECUTABLE=%CATALINA_HOME%\bin\tomcat6.exe

rem Set default Service name
set SERVICE_NAME=Tomcat6
set PR_DISPLAYNAME=Apache Tomcat

if "%1" == "" goto displayUsage
if "%2" == "" goto setServiceName
set SERVICE_NAME=%2
set PR_DISPLAYNAME=Apache Tomcat %2
:setServiceName
if %1 == install goto doInstall
if %1 == remove goto doRemove
if %1 == uninstall goto doRemove
echo Unknown parameter "%1"
:displayUsage
echo.
echo Usage: service.bat install/remove [service_name]
goto end

:doRemove
rem Remove the service
"%EXECUTABLE%" //DS//%SERVICE_NAME%
echo The service '%SERVICE_NAME%' has been removed
goto end

:doInstall
rem Install the service
echo Installing the service '%SERVICE_NAME%' ...
echo Using CATALINA_HOME:    %CATALINA_HOME%
echo Using CATALINA_BASE:    %CATALINA_BASE%
echo Using JAVA_HOME:        %JAVA_HOME%

rem Use the environment variables as an example
rem Each command line option is prefixed with PR_

set PR_DESCRIPTION=Apache Tomcat Server - http://jakarta.apache.org/tomcat
set PR_INSTALL=%EXECUTABLE%
set PR_LOGPATH=%CATALINA_BASE%\logs
set PR_CLASSPATH=%CATALINA_HOME%\bin\bootstrap.jar
rem Set the server jvm from JAVA_HOME
set PR_JVM=%JAVA_HOME%\jre\bin\server\jvm.dll
if exist "%PR_JVM%" goto foundJvm
rem Set the client jvm from JAVA_HOME
set PR_JVM=%JAVA_HOME%\jre\bin\client\jvm.dll
if exist "%PR_JVM%" goto foundJvm
set PR_JVM=auto
:foundJvm
echo Using JVM:              %PR_JVM%
rem 设定启动方式为自启动
"%EXECUTABLE%" //IS//%SERVICE_NAME% --StartClass org.apache.catalina.startup.Bootstrap --StopClass org.apache.catalina.startup.Bootstrap --StartParams start --StopParams stop --Startup Automatic
if not errorlevel 1 goto installed
echo Failed installing '%SERVICE_NAME%' service
goto end
:installed
rem Clear the environment variables. They are not needed any more.
set PR_DISPLAYNAME=
set PR_DESCRIPTION=
set PR_INSTALL=
set PR_LOGPATH=
set PR_CLASSPATH=
set PR_JVM=
rem Set extra parameters
rem 设定虚拟内存
"%EXECUTABLE%" //US//%SERVICE_NAME% --JvmOptions "-Xms512M;-Xmx512M;-XX:NewRatio=3;-XX:PermSize=100M;-XX:MaxPermSize=100M;-Dcatalina.base=%CATALINA_BASE%;-Dcatalina.home=%CATALINA_HOME%;-Djava.endorsed.dirs=%CATALINA_HOME%\endorsed" --StartMode jvm --StopMode jvm
rem More extra parameters
set PR_LOGPATH=%CATALINA_BASE%\logs
set PR_STDOUTPUT=auto
set PR_STDERROR=auto
"%EXECUTABLE%" //US//%SERVICE_NAME% ++JvmOptions "-Djava.io.tmpdir=%CATALINA_BASE%\temp" --JvmMs 128 --JvmMx 256
echo The service '%SERVICE_NAME%' has been installed.

:end
cd %CURRENT_DIR%

</pre>
          <br/><br/>
          <span style="color:red;">
            <a href="http://kong-kong.javaeye.com/blog/172972#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 17 Mar 2008 14:00:46 +0800</pubDate>
        <link>http://kong-kong.javaeye.com/blog/172972</link>
        <guid>http://kong-kong.javaeye.com/blog/172972</guid>
      </item>
      <item>
        <title>ActiveMQ Spring配置</title>
        <author>kong6001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kong-kong.javaeye.com">kong6001</a>&nbsp;
          链接：<a href="http://kong-kong.javaeye.com/blog/159446" style="color:red;">http://kong-kong.javaeye.com/blog/159446</a>&nbsp;
          发表时间: 2008年01月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="xml">
&lt;beans
  xmlns="http://www.springframework.org/schema/beans"
  xmlns:amq="http://activemq.org/config/1.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
  http://activemq.org/config/1.0 http://activemq.apache.org/schema/activemq-core.xsd
  http://activemq.apache.org/camel/schema/spring http://activemq.apache.org/camel/schema/spring/camel-spring.xsd">
  
  &lt;!--  lets create an embedded ActiveMQ Broker -->
  &lt;amq:broker useJmx="false" persistent="false">
    &lt;amq:transportConnectors>
      &lt;amq:transportConnector uri="tcp://localhost:0" />
    &lt;/amq:transportConnectors>
  &lt;/amq:broker>

   &lt;!--  ActiveMQ destinations to use  -->
  &lt;amq:queue id="destination"  physicalName="org.apache.activemq.spring.Test.spring.embedded"/>

  &lt;!-- JMS ConnectionFactory to use, configuring the embedded broker using XML -->
  &lt;amq:connectionFactory id="jmsFactory" brokerURL="vm://localhost"/>
  

  &lt;!-- Spring JMS Template -->
  &lt;bean id="myJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    &lt;property name="connectionFactory">
      &lt;!-- lets wrap in a pool to avoid creating a connection per send -->
      &lt;bean class="org.springframework.jms.connection.SingleConnectionFactory">
        &lt;property name="targetConnectionFactory">
          &lt;ref local="jmsFactory" />
        &lt;/property>
      &lt;/bean>
    &lt;/property>
  &lt;/bean>

  &lt;bean id="consumerJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    &lt;property name="connectionFactory" ref="jmsFactory"/>
  &lt;/bean>
&lt;/beans>
</pre>
          <br/><br/>
          <span style="color:red;">
            <a href="http://kong-kong.javaeye.com/blog/159446#comments" style="color:red;">已有 <strong>1</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jan 2008 22:41:13 +0800</pubDate>
        <link>http://kong-kong.javaeye.com/blog/159446</link>
        <guid>http://kong-kong.javaeye.com/blog/159446</guid>
      </item>
      <item>
        <title>工作流引擎</title>
        <author>kong6001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kong-kong.javaeye.com">kong6001</a>&nbsp;
          链接：<a href="http://kong-kong.javaeye.com/blog/102349" style="color:red;">http://kong-kong.javaeye.com/blog/102349</a>&nbsp;
          发表时间: 2007年07月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font face="Arial">OSWorkflow</font></p>
<p><font face="Arial"><a href="http://www.opensymphony.com/osworkflow/">www.opensymphony.com/osworkflow/</a></font></p>
<p><font face="Arial"><a href="http://wiki.opensymphony.com/pages/viewpage.action?pageId=2481">http://wiki.opensymphony.com/pages/viewpage.action?pageId=2481</a></font></p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://kong-kong.javaeye.com/blog/102349#comments" style="color:red;">已有 <strong>1</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 18 Jul 2007 09:09:40 +0800</pubDate>
        <link>http://kong-kong.javaeye.com/blog/102349</link>
        <guid>http://kong-kong.javaeye.com/blog/102349</guid>
      </item>
      <item>
        <title>读取jar包中的文件</title>
        <author>kong6001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kong-kong.javaeye.com">kong6001</a>&nbsp;
          链接：<a href="http://kong-kong.javaeye.com/blog/95563" style="color:red;">http://kong-kong.javaeye.com/blog/95563</a>&nbsp;
          发表时间: 2007年06月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;TestReadJar&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp;</li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;args </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;IOException&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;jarName=</span><span class="string">&quot;C://VODOSSClient.jar&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;fileName=</span><span class="string">&quot;client.properties&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JarFile&nbsp;jarFile&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;JarFile(jarName);</span><span class="comment">//读入jar文件 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JarEntry&nbsp;entry&nbsp;=&nbsp;jarFile.getJarEntry(fileName);&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;input&nbsp;=&nbsp;jarFile.getInputStream(entry);</span><span class="comment">//读入需要的文件 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;readFile(input); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jarFile.close(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;readFile(InputStream&nbsp;input) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">throws</span><span>&nbsp;IOException&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStreamReader&nbsp;isr&nbsp;= &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">new</span><span>&nbsp;InputStreamReader(input); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BufferedReader&nbsp;reader&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;BufferedReader(isr); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;line; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">while</span><span>&nbsp;((line&nbsp;=&nbsp;reader.readLine())&nbsp;!=&nbsp;</span><span class="keyword">null</span><span>)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(line); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reader.close(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
</ol>
</div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://kong-kong.javaeye.com/blog/95563#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 29 Jun 2007 16:06:07 +0800</pubDate>
        <link>http://kong-kong.javaeye.com/blog/95563</link>
        <guid>http://kong-kong.javaeye.com/blog/95563</guid>
      </item>
      <item>
        <title>Tomcat全攻略</title>
        <author>kong6001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kong-kong.javaeye.com">kong6001</a>&nbsp;
          链接：<a href="http://kong-kong.javaeye.com/blog/95555" style="color:red;">http://kong-kong.javaeye.com/blog/95555</a>&nbsp;
          发表时间: 2007年06月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font face="Arial"><a href="http://docs.huihoo.com/apache/tomcat/l-tomcat.htm">http://docs.huihoo.com/apache/tomcat/l-tomcat.htm</a></font>
          <br/><br/>
          <span style="color:red;">
            <a href="http://kong-kong.javaeye.com/blog/95555#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 29 Jun 2007 15:47:00 +0800</pubDate>
        <link>http://kong-kong.javaeye.com/blog/95555</link>
        <guid>http://kong-kong.javaeye.com/blog/95555</guid>
      </item>
      <item>
        <title>Linux后台命令</title>
        <author>kong6001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kong-kong.javaeye.com">kong6001</a>&nbsp;
          链接：<a href="http://kong-kong.javaeye.com/blog/94288" style="color:red;">http://kong-kong.javaeye.com/blog/94288</a>&nbsp;
          发表时间: 2007年06月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <span class="postbody"><span style="FONT-WEIGHT: bold">4.nohug</span> <br />
<br />
如果你正在运行一个进程，而且你觉得在退出帐户时该进程还不会结束，那么可以使用n o h u p命令。该命令可以在你退出帐户之后继续运行相应的进程。n o h u p就是不挂起的意思( no hang up)。 <br />
该命令的一般形式为： <br />
</span>
<table cellspacing="1" border="0" align="center" width="90%" cellpadding="3">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>代码:</strong></span></td>
        </tr>
        <tr>
            <td class="code"><br />
            nohup command &amp; <br />
            </td>
        </tr>
    </tbody>
</table>
<span class="postbody"><br />
<br />
使用nohup命令提交作业 <br />
如果使用n o h u p命令提交作业，那么在缺省情况下该作业的所有输出都被重定向到一个名为n o h u p . o u t的文件中，除非另外指定了输出文件： <br />
</span>
<table cellspacing="1" border="0" align="center" width="90%" cellpadding="3">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>代码:</strong></span></td>
        </tr>
        <tr>
            <td class="code"><br />
            nohup command &gt; myout.file 2&gt;&amp;1 <br />
            </td>
        </tr>
    </tbody>
</table>
<span class="postbody"><br />
在上面的例子中，输出被重定向到m y o u t . f i l e文件中。 <br />
<br />
让我们来看一个例子，验证一下在退出帐户后相应的作业是否能够继续运行。我们先提交一个名为p s 1的日志清除进程： <br />
</span>
<table cellspacing="1" border="0" align="center" width="90%" cellpadding="3">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>代码:</strong></span></td>
        </tr>
        <tr>
            <td class="code"><br />
            $nobup ps1 &amp; <br />
            </td>
        </tr>
    </tbody>
</table>
<span class="postbody"><br />
现在退出该s h e l l，再重新登录，然后执行下面的命令： <br />
</span>
<table cellspacing="1" border="0" align="center" width="90%" cellpadding="3">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>代码:</strong></span></td>
        </tr>
        <tr>
            <td class="code"><br />
            $ps x |grep ps1 <br />
            </td>
        </tr>
    </tbody>
</table>
<span class="postbody"><br />
<br />
我们看到，该脚本还在运行。如果系统不支持ps x命令，使用ps -ef|grep ps1命令。<br />
</span>
          <br/><br/>
          <span style="color:red;">
            <a href="http://kong-kong.javaeye.com/blog/94288#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 26 Jun 2007 13:55:34 +0800</pubDate>
        <link>http://kong-kong.javaeye.com/blog/94288</link>
        <guid>http://kong-kong.javaeye.com/blog/94288</guid>
      </item>
      <item>
        <title>eBook</title>
        <author>kong6001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kong-kong.javaeye.com">kong6001</a>&nbsp;
          链接：<a href="http://kong-kong.javaeye.com/blog/86367" style="color:red;">http://kong-kong.javaeye.com/blog/86367</a>&nbsp;
          发表时间: 2007年06月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font face="Arial">ftp://202.96.64.144/pub/books/</font>
          <br/><br/>
          <span style="color:red;">
            <a href="http://kong-kong.javaeye.com/blog/86367#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 03 Jun 2007 19:28:07 +0800</pubDate>
        <link>http://kong-kong.javaeye.com/blog/86367</link>
        <guid>http://kong-kong.javaeye.com/blog/86367</guid>
      </item>
      <item>
        <title>MD5信息摘要</title>
        <author>kong6001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kong-kong.javaeye.com">kong6001</a>&nbsp;
          链接：<a href="http://kong-kong.javaeye.com/blog/85001" style="color:red;">http://kong-kong.javaeye.com/blog/85001</a>&nbsp;
          发表时间: 2007年05月31日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="code_title">
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;java.io.FileInputStream; &nbsp;&nbsp;</span></span></li>
    <li class=""><span></span><span class="keyword">import</span><span>&nbsp;java.security.MessageDigest; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="comment">/** </span>&nbsp;</li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;@author:&nbsp;fanzhi_kong </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;@version&nbsp;MD5Demo&nbsp;V1.0 </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;@date:&nbsp;&nbsp;2007&nbsp;May&nbsp;31,&nbsp;2007&nbsp;10:10:35&nbsp;AM </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;* </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span></span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;MD5&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">char</span><span>&nbsp;hexDigits[]&nbsp;=&nbsp;{&nbsp;'</span><span class="number">0</span><span>',&nbsp;'</span><span class="number">1</span><span>',&nbsp;'</span><span class="number">2</span><span>',&nbsp;'</span><span class="number">3</span><span>',&nbsp;'</span><span class="number">4</span><span>',&nbsp;'</span><span class="number">5</span><span>',&nbsp;'</span><span class="number">6</span><span>',&nbsp;'</span><span class="number">7</span><span>',&nbsp;'</span><span class="number">8</span><span>',&nbsp;'</span><span class="number">9</span><span>', &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'a',&nbsp;'b',&nbsp;'c',&nbsp;'d',&nbsp;'e',&nbsp;'f'&nbsp;}; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/**生成字符串的MD5码 </span>&nbsp;</li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;s </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;String&nbsp;getMD5(String&nbsp;s)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">try</span><span>&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">byte</span><span>[]&nbsp;strTemp&nbsp;=&nbsp;s.getBytes(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageDigest&nbsp;md&nbsp;=&nbsp;MessageDigest.getInstance(</span><span class="string">&quot;MD5&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md.update(strTemp); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;digest(md); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">catch</span><span>&nbsp;(Exception&nbsp;e)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">&quot;Error:&quot;</span><span>+e.getMessage()); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/**生成文件的MD5 </span>&nbsp;</li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;path&nbsp;文件完整路径 </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;String&nbsp;getMD5File(String&nbsp;path)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">try</span><span>&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageDigest&nbsp;mDigest&nbsp;=&nbsp;MessageDigest.getInstance(</span><span class="string">&quot;MD5&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;读取文件 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;SIZE&nbsp;=&nbsp;</span><span class="number">1024</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileInputStream&nbsp;in&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;FileInputStream(path); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">byte</span><span>[]&nbsp;buff&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;</span><span class="keyword">byte</span><span>[SIZE]; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">int</span><span>&nbsp;len; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">while</span><span>&nbsp;((len&nbsp;=&nbsp;in.read(buff))&nbsp;!=&nbsp;-</span><span class="number">1</span><span>)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mDigest.update(buff,&nbsp;</span><span class="number">0</span><span>,&nbsp;len); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in.close(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;digest(mDigest); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">catch</span><span>&nbsp;(Exception&nbsp;e)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">&quot;error:&quot;</span><span>+e.getMessage()); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/**计算摘要 </span>&nbsp;</li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;mDigest </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;String&nbsp;digest(MessageDigest&nbsp;mDigest)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">byte</span><span>[]&nbsp;md&nbsp;=&nbsp;mDigest.digest(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">int</span><span>&nbsp;j&nbsp;=&nbsp;md.length; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">char</span><span>&nbsp;str[]&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;</span><span class="keyword">char</span><span>[j&nbsp;*&nbsp;</span><span class="number">2</span><span>]; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">int</span><span>&nbsp;k&nbsp;=&nbsp;</span><span class="number">0</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">int</span><span>&nbsp;i&nbsp;=&nbsp;</span><span class="number">0</span><span>;&nbsp;i&nbsp;&lt;&nbsp;j;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">byte</span><span>&nbsp;byte0&nbsp;=&nbsp;md[i]; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str[k++]&nbsp;=&nbsp;hexDigits[byte0&nbsp;&gt;&gt;&gt;&nbsp;</span><span class="number">4</span><span>&nbsp;&amp;&nbsp;</span><span class="number">0xf</span><span>]; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str[k++]&nbsp;=&nbsp;hexDigits[byte0&nbsp;&amp;&nbsp;</span><span class="number">0xf</span><span>]; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">new</span><span>&nbsp;String(str); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp;</li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;args </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;System.out.println(MD5.getMD5(&quot;astro123456&quot;)); </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;System.out.println(MD5.getMD5(&quot;123456&quot;)); </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;path&nbsp;=&nbsp;</span><span class="string">&quot;C:/tdemo.log&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;path1&nbsp;=&nbsp;</span><span class="string">&quot;C:/tdemo1.log&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;path2&nbsp;=&nbsp;</span><span class="string">&quot;C:/ftpupload/越狱111.rmvb&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(MD5.getMD5File(path)); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(MD5.getMD5File(path1)); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">long</span><span>&nbsp;beginTime&nbsp;=&nbsp;System.currentTimeMillis(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(MD5.getMD5File(path2)); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">long</span><span>&nbsp;endTime&nbsp;=&nbsp;System.currentTimeMillis()&nbsp;-&nbsp;beginTime; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">&quot;计算时间为：&quot;</span><span>&nbsp;+&nbsp;endTime&nbsp;/&nbsp;</span><span class="number">1000</span><span>&nbsp;+&nbsp;</span><span class="string">&quot;&nbsp;s&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
</div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://kong-kong.javaeye.com/blog/85001#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 31 May 2007 10:31:02 +0800</pubDate>
        <link>http://kong-kong.javaeye.com/blog/85001</link>
        <guid>http://kong-kong.javaeye.com/blog/85001</guid>
      </item>
      <item>
        <title>HttpClient</title>
        <author>kong6001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kong-kong.javaeye.com">kong6001</a>&nbsp;
          链接：<a href="http://kong-kong.javaeye.com/blog/83787" style="color:red;">http://kong-kong.javaeye.com/blog/83787</a>&nbsp;
          发表时间: 2007年05月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font color="#3370cc">HttpClient 是 Apache Jakarta Common 下的子项目，可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包，并且它支持 HTTP 协议最新的版本和建议。本文首先介绍 HTTPClient，然后根据作者实际工作经验给出了一些常见问题的解决方法。 HttpClient简介 HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了，越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能，但是对于大部分应用程序来说，JDK 库本身提供的功能还不够丰富和灵活。HttpClient 是 Apache Jakarta Common 下的子项目，用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包，并且它支持 HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中，比如 Apache Jakarta 上很著名的另外两个开源项目 Cactus 和 HTMLUnit 都使用了 HttpClient，更多使用 HttpClient 的应用可以参见<a href="http://wiki.apache.org/jakarta-httpclient/HttpClientPowered" target="_blank">http://wiki.apache.org/jakarta-httpclient/HttpClientPowered</a>。HttpClient 项目非常活跃，使用的人还是非常多的</font></p>
<p><font face="Arial"><a href="http://jakarta.apache.org/commons/httpclient/">http://jakarta.apache.org/commons/httpclient/</a></font></p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://kong-kong.javaeye.com/blog/83787#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 28 May 2007 08:54:05 +0800</pubDate>
        <link>http://kong-kong.javaeye.com/blog/83787</link>
        <guid>http://kong-kong.javaeye.com/blog/83787</guid>
      </item>
      <item>
        <title>文件夹加命令行右键菜单</title>
        <author>kong6001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kong-kong.javaeye.com">kong6001</a>&nbsp;
          链接：<a href="http://kong-kong.javaeye.com/blog/78975" style="color:red;">http://kong-kong.javaeye.com/blog/78975</a>&nbsp;
          发表时间: 2007年05月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font face="Arial">加快工作效率200 倍，给文件夹加命令行右键菜单<br />
要在文件夹的右键菜单中添加&ldquo;命令提示符&rdquo;选项。<br />
在注册表HKEY_CLASSES_ROOT\Directory\shell分支下新建一项&ldquo;CommandPrompt&rdquo;，修改右侧窗格中的&ldquo;默认&rdquo;键值为&ldquo;命令提示符&rdquo;，<br />
并在该项下级再建一个新项&ldquo;Command&rdquo;，将右侧窗格中&ldquo;默认&rdquo;键值设为&ldquo;cmd.exe /k cd &quot;%1&quot;&rdquo;。<br />
现在我们就可以不需要输入长长的CD命令就切换到指定的目录了。</font>
          <br/><br/>
          <span style="color:red;">
            <a href="http://kong-kong.javaeye.com/blog/78975#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 12 May 2007 00:16:08 +0800</pubDate>
        <link>http://kong-kong.javaeye.com/blog/78975</link>
        <guid>http://kong-kong.javaeye.com/blog/78975</guid>
      </item>
      <item>
        <title>XHTML</title>
        <author>kong6001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kong-kong.javaeye.com">kong6001</a>&nbsp;
          链接：<a href="http://kong-kong.javaeye.com/blog/56990" style="color:red;">http://kong-kong.javaeye.com/blog/56990</a>&nbsp;
          发表时间: 2007年03月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <a href="http://www-128.ibm.com/developerworks/cn/xml/x-wa-xhtml/index.html">www-128.ibm.com/developerworks/cn/xml/x-wa-xhtml/index.html</a>
          <br/><br/>
          <span style="color:red;">
            <a href="http://kong-kong.javaeye.com/blog/56990#comments" style="color:red;">已有 <strong>1</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 02 Mar 2007 14:19:00 +0800</pubDate>
        <link>http://kong-kong.javaeye.com/blog/56990</link>
        <guid>http://kong-kong.javaeye.com/blog/56990</guid>
      </item>
      <item>
        <title>Spring  propertyConfigurer使用</title>
        <author>kong6001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kong-kong.javaeye.com">kong6001</a>&nbsp;
          链接：<a href="http://kong-kong.javaeye.com/blog/56972" style="color:red;">http://kong-kong.javaeye.com/blog/56972</a>&nbsp;
          发表时间: 2007年03月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="code_title">配置Bean</div>
<span><span>
<div class="code_title"></div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span>&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;propertyConfigurer&quot;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span></span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;org.springframework.beans.factory.config.PropertyPlaceholderConfigurer&quot;</span><span>&nbsp;&nbsp;</span><span class="attribute">lazy-init</span><span>=</span><span class="attribute-value">&quot;false&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;locations&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">list</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>/WEB-INF/jdbc.properties</span><span class="tag">&lt;/</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="tag">&lt;/</span><span class="tag-name">list</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;/</span><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;</p>
<div class="code_title">引用
<div class="code_title"></div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;username&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;${jdbc.username}&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;password&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;${jdbc.password}&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
</div>
</span></span>
          <br/><br/>
          <span style="color:red;">
            <a href="http://kong-kong.javaeye.com/blog/56972#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 02 Mar 2007 11:42:55 +0800</pubDate>
        <link>http://kong-kong.javaeye.com/blog/56972</link>
        <guid>http://kong-kong.javaeye.com/blog/56972</guid>
      </item>
      <item>
        <title>Convert a Java OutputStream to an InputStream</title>
        <author>kong6001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kong-kong.javaeye.com">kong6001</a>&nbsp;
          链接：<a href="http://kong-kong.javaeye.com/blog/56821" style="color:red;">http://kong-kong.javaeye.com/blog/56821</a>&nbsp;
          发表时间: 2007年03月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>原文地址：<a href="http://ostermiller.org/convert_java_outputstream_inputstream.html">ostermiller.org/convert_java_outputstream_inputstream.html</a></p>
<h1>Convert a Java OutputStream to an InputStream</h1>
<p>If you have ever programmed using Java IO, you will quickly run into a situation in which a class creates data on an OutputStream and you need to send it to another class that expects to read the data from an input stream. You'll soon be asking the question, &quot;How do I convert an OutputStream to an InputStream?&quot;</p>
<p>Nowhere in Java will you find a OutpStreamToInputStreamConverter class. Luckily, there are several ways to go about this.</p>
<h2>Method 1: Buffer the data using a byte array</h2>
<p>The easiest method is to buffer the data using a byte array. The code will look something like this:</p>
<pre>  ByteArrayOutputStream out = new ByteArrayOutputStream();
  class1.putDataOnOutputStream(out);
  class2.processDataFromInputStream(
    new ByteArrayInputStream(out.toByteArray())
  );
</pre>
<p>That's it! The OutputStream has been converted to an InputStream.</p>
<h2>Method 2: Use pipes</h2>
<p>The problem with the first method is that you must actually have enough memory to buffer the entire amount of data. You could buffer larger amounts of data by using the filesystem rather than memory, but either way there is a hard limit to the size of the data that can be handled. The solution is create a thread to produce the data to the PipedOutputStream. The current thread can then read the data as it comes in.</p>
<pre>  PipedInputStream in = new PipedInputStream();
  PipedOUtputStream out = new PipedOutputStream(in);
  new Thread(
    new Runnable(){
      public void run(){
        class1.putDataOnOutputStream(out);
      }
    }
  ).start();
  class2.processDataFromInputStream(in);
</pre>
<h2>Method 3: Use Circular Buffers</h2>
<p>The two piped streams in method two actually manage a hidden circular buffer. It is conceptually easier to use an explicit <a href="http://ostermiller.org/utils/CircularBuffer.html">Circular Buffer</a>. CircularBuffers offer several advantages: </p>
<ul>
    <li>One CircularBuffer class rather than two pipe classes. </li>
    <li>It is easier to convert between the &quot;buffer all data&quot; and &quot;extra threads&quot; approaches. </li>
    <li>You can change the buffer size rather than relying on the hard-coded 1k of buffer in the pipes. </li>
</ul>
<h3>Multiple Threaded Example of a Circular Buffer</h3>
<pre>  CircularByteBuffer cbb = new CircularByteBuffer();
  new Thread(
    new Runnable(){
      public void run(){
        class1.putDataOnOutputStream(cbb.getOutputStream());
      }
    }
  ).start();
  class2.processDataFromInputStream(cbb.getInputStream());
</pre>
<h3>Single Threaded Example of a Circular Buffer</h3>
<pre>  // buffer all data in a circular buffer of infinite size
  CircularByteBuffer cbb = new CircularByteBuffer(CircularByteBuffer.INFINITE_SIZE);
  class1.putDataOnOutputStream(cbb.getOutputStream());
  class2.processDataFromInputStream(cbb.getInputStream());
</pre>
<p>See also: <a href="http://ostermiller.org/convert_java_writer_reader.html">Converting a Writer to a Reader</a> </p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://kong-kong.javaeye.com/blog/56821#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 01 Mar 2007 20:38:21 +0800</pubDate>
        <link>http://kong-kong.javaeye.com/blog/56821</link>
        <guid>http://kong-kong.javaeye.com/blog/56821</guid>
      </item>
      <item>
        <title>Convert a Java Writer to a Reader</title>
        <author>kong6001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kong-kong.javaeye.com">kong6001</a>&nbsp;
          链接：<a href="http://kong-kong.javaeye.com/blog/56820" style="color:red;">http://kong-kong.javaeye.com/blog/56820</a>&nbsp;
          发表时间: 2007年03月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>原文地址：<a href="http://ostermiller.org/convert_java_writer_reader.html" target="_blank">ostermiller.org/convert_java_writer_reader.html</a></p>
<h1 align="center">Convert a Java Writer to a Reader</h1>
<p>If you have ever programmed using Java IO, you will quickly run into a situation in which a class creates data on a Writer and you need to send it to another class that expects to read the data from a Reader. You'll soon be asking the question, &quot;How do I convert a Writer to a Reader?&quot;</p>
<p>Nowhere in Java will you find a WriterToReaderConverter class. Luckily, there are several ways to go about this.</p>
<h2>Method 1: Buffer the data using a String</h2>
<p>The easiest method is to buffer the data using a String. The code will look something like this:</p>
<pre>  StringWriter out = new StringWriter();
  class1.putDataOnWriter(out);
  class2.processDataFromReader(
    new StringReader(out.toString())
  );
</pre>
<p>That's it! The Writer has been converted to a Reader.</p>
<h2>Method 2: Use pipes</h2>
<p>The problem with the first method is that you must actually have enough memory to buffer the entire amount of data. You could buffer larger amounts of data by using the filesystem rather than memory, but either way there is a hard limit to the size of the data that can be handled. The solution is create a thread to produce the data to the PipedWriter. The current thread can then read the data as it comes in.</p>
<pre>  PipedReader in = new PipedReader();
  PipedWriter out = new PipedWriter(in);
  new Thread(
    new Runnable(){
      public void run(){
        class1.putDataOnWriter(out);
      }
    }
  ).start();
  class2.processDataFromReader(in);
</pre>
<h2>Method 3: Use Circular Buffers</h2>
<p>The two piped streams in method two actually manage a hidden circular buffer. It is conceptually easier to use an explicit <a href="http://ostermiller.org/utils/CircularBuffer.html">Circular Buffer</a>. CircularBuffers offer several advantages: </p>
<ul>
    <li>One CircularBuffer class rather than two pipe classes. </li>
    <li>It is easier to convert between the &quot;buffer all data&quot; and &quot;two threads&quot; approaches. </li>
    <li>You can change the buffer size rather than relying on the hard-coded 1k of buffer in the pipes. </li>
</ul>
<h3>Multiple Threaded Example of a Circular Buffer</h3>
<pre>  CircularCharBuffer ccb = new CircularCharBuffer();
  new Thread(
    new Runnable(){
      public void run(){
        class1.putDataOnWriter(ccb.getWriter());
      }
    }
  ).start();
  class2.processDataFromReader(ccb.getReader());
</pre>
<h3>Single Threaded Example of a Circular Buffer</h3>
<pre>  // buffer all data in a circular buffer of infinite size
  CircularCharBuffer ccb = new CircularCharBuffer(CircularCharBuffer.INFINITE_SIZE);
  class1.putDataOnWriter(ccb.getWriter());
  class2.processDataFromReader(ccb.getReader());
</pre>
<p>See also: <a href="http://ostermiller.org/convert_java_outputstream_inputstream.html">Converting an OutputStream to an InputStream</a> </p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://kong-kong.javaeye.com/blog/56820#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 01 Mar 2007 20:36:33 +0800</pubDate>
        <link>http://kong-kong.javaeye.com/blog/56820</link>
        <guid>http://kong-kong.javaeye.com/blog/56820</guid>
      </item>
      <item>
        <title>测试下先</title>
        <author>kong6001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kong-kong.javaeye.com">kong6001</a>&nbsp;
          链接：<a href="http://kong-kong.javaeye.com/blog/56799" style="color:red;">http://kong-kong.javaeye.com/blog/56799</a>&nbsp;
          发表时间: 2007年03月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <blockquote dir="ltr" style="MARGIN-RIGHT: 0px"><blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p dir="ltr" align="left" style="MARGIN-RIGHT: 0px">Test<img src="/javascripts/fckeditor/editor/images/smiley/msn/teeth_smile.gif" alt="" /></p>
</blockquote>
<p dir="ltr" align="left" style="MARGIN-RIGHT: 0px">嗯，富文本编辑器还可以。</p>
</blockquote>
<div class="code_title"></div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://kong-kong.javaeye.com/blog/56799#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 01 Mar 2007 20:25:00 +0800</pubDate>
        <link>http://kong-kong.javaeye.com/blog/56799</link>
        <guid>http://kong-kong.javaeye.com/blog/56799</guid>
      </item>
  </channel>
</rss>