<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Computer, Electron and Technology &#187; java</title>
	<atom:link href="http://www.donevii.com/tags/java/feed" rel="self" type="application/rss+xml" />
	<link>http://www.donevii.com</link>
	<description>DoneVII CET &#38; CPPLITE</description>
	<lastBuildDate>Sun, 17 Jan 2010 05:32:08 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>netbeans 6.5 beta</title>
		<link>http://www.donevii.com/post/528.html</link>
		<comments>http://www.donevii.com/post/528.html#comments</comments>
		<pubDate>Tue, 30 Sep 2008 16:46:09 +0000</pubDate>
		<dc:creator>dengwei</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.donevii.com/post/528.html</guid>
		<description><![CDATA[新的 netbeans 6.5 比 6.1 更好用了一些，但是我在试用 PHP Project 时，对中文的支持还稍差一点，看来暂时还是离不开 Zend Studio for Eclipse。

	相关文章
	
	頁面多個swf呼叫ExternalInterface問題 (0)
	超搞笑... ]]></description>
			<content:encoded><![CDATA[<p>新的 netbeans 6.5 比 6.1 更好用了一些，但是我在试用 PHP Project 时，对中文的支持还稍差一点，看来暂时还是离不开 Zend Studio for Eclipse。<br /><a href="http://www.flickr.com/photos/66769343@N00/2758231840"><img src="http://farm4.static.flickr.com/3164/2758231840_21c08dd02b.jpg" /></a></p>

	<h4>相关文章</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.donevii.com/post/66.html" title="頁面多個swf呼叫ExternalInterface問題 (2006-09-01)">頁面多個swf呼叫ExternalInterface問題</a> (0)</li>
	<li><a href="http://www.donevii.com/post/20.html" title="超搞笑的舞蹈 (2006-08-18)">超搞笑的舞蹈</a> (0)</li>
	<li><a href="http://www.donevii.com/post/10.html" title="让页面不缓存 on PHP (2006-08-17)">让页面不缓存 on PHP</a> (0)</li>
	<li><a href="http://www.donevii.com/post/624.html" title="解决 Zend Studio for Eclipse 6.x.x 启动时的 bug (2008-11-14)">解决 Zend Studio for Eclipse 6.x.x 启动时的 bug</a> (0)</li>
	<li><a href="http://www.donevii.com/post/173.html" title="解决 AJAX 跨域方案二(Rewrite) (2006-11-06)">解决 AJAX 跨域方案二(Rewrite)</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.donevii.com/post/528.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[转] J2me流媒体技术实现讨论[3]</title>
		<link>http://www.donevii.com/post/463.html</link>
		<comments>http://www.donevii.com/post/463.html#comments</comments>
		<pubDate>Sun, 31 Aug 2008 11:16:08 +0000</pubDate>
		<dc:creator>gavinkwoe</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[mtk]]></category>
		<category><![CDATA[video & audio]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[j2me]]></category>
		<category><![CDATA[stream]]></category>
		<category><![CDATA[流媒体]]></category>

		<guid isPermaLink="false">http://www.donevii.com/?p=463</guid>
		<description><![CDATA[Jffmpeg应该是对 ffmpeg 这个C编写的工具的Java封装。
另一个封装的是
http://fobs.sourceforge.net/
FOBS, the C++ &#38; JMF wrapper for ffmpeg.
Cleverpig said：“

Quote:



其实，感觉上可以自己编写一套流媒体规范的... ]]></description>
			<content:encoded><![CDATA[<p>Jffmpeg应该是对 ffmpeg 这个C编写的工具的Java封装。</p>
<p>另一个封装的是<br />
<a href="http://fobs.sourceforge.net/" target="_blank">http://fobs.sourceforge.net/</a><br />
FOBS, the C++ &amp; JMF wrapper for ffmpeg.</p>
<p>Cleverpig said：“</p>
<div style="margin: 5px 20px 20px;">
<div class="smallfont" style="margin-bottom: 2px;">Quote:</div>
<table border="0" cellspacing="0" cellpadding="6" width="100%">
<tbody>
<tr>
<td class="alt2" style="border: 1px inset;">其实，感觉上可以自己编写一套流媒体规范的实现，比如将源文件指定为wav格式或者其它的raw格式，然后分段发送到mobile。。<br />
但是这样做确实效率低，而且浪费带宽。本人研究了一下Tea Vui Huang的mobilecast实现有些心得，在此与大家讨论一下：<br />
1。使用MMS发送radiocast：由于MMS服务可以使用图片、音乐等多媒体元素，而且技术比较成熟，所以将它作为radiocast的载体是方便的选择。而对于mobile用户来讲，cast的使用方式可以采用请求和订阅两种模式；</p>
<p>2。radio文件格式的选择：对于某些手机不能支持mp3格式文件，即使支持mp3也受到memory size的限制，所以采用更为普遍、压缩比更大的amr格式是比较好的choice；</p>
<p>3。amr文件的分割：由于目前大多数手机仅能支持100KB左右的彩信，所以最佳的cast长度应该是50秒。比如将大约5分钟的mp3文件分割为6个 amr章节文件，每个章节文件所包含的audio长度为45-50秒。而每个amr格式的压缩比将是普通mp3格式3-6倍。按照播放率为 600KB/min的mp3格式计算，保守地假定amr格式压缩比为mp3格式的6倍，amr格式的播放率为100KB/min，而45秒的amr文件大 小为75KB。</p>
<p>所以Tea Vui Huang的做法是很clever的。”</td>
</tr>
</tbody>
</table>
</div>
<p>我试验过了，利用ffmpeg的这两个参数，可以控制让ffmpeg来将一个大mp3劈分成许多小段的独立播放的amr文件。<br />
-ss time_off        set the start time offset<br />
-t duration         set the recording time</p>
<p>比如你写这么个perl文件，然后运行：</p>
<div style="margin: 5px 20px 20px;">
<div class="smallfont" style="margin-bottom: 2px;">Code:</div>
<pre class="alt2" style="border: 1px inset; margin: 0px; padding: 6px; overflow: auto; width: 620px; height: 114px; text-align: left;" dir="ltr">@inputFilename = "C:\\opt\\media\\changjin.wma";
@outputFilename = "C:\\opt\\media\\changjin";
for($i=1,$j=1;$i&lt;=1000;$i+=10,$j++)
{
    system("C:\\software\\ffmpeg.exe -i @inputFilename -ac 1 -acodec amr_nb -t 10 -ss $i @outputFilename.$j.\".amr\"");
}</pre>
</div>
<p>就把一个大文件拆分成许多小amr了，每一个amr文件只有17KB。</p>
<p>Qinjiwy said：“</p>
<div style="margin: 5px 20px 20px;">
<div class="smallfont" style="margin-bottom: 2px;">Quote:</div>
<table border="0" cellspacing="0" cellpadding="6" width="100%">
<tbody>
<tr>
<td class="alt2" style="border: 1px inset;">提一个优化的小建议<br />
如果分段太小,播放的间断太多的话,用户感觉上和系统开销都不是很合适.</p>
<p>可以考虑多开几个线程, 另外,每个文件不一定要一样大,可以考虑<br />
文件逐渐增大,从目前移动网速计算,<br />
压缩比高的amr语音文件播放的时间要比下载的时间长.在第一次下载后开始播放的这段时间中,就<br />
可以下载比第一次下载大的文件了,这样能减少网络开销</td>
</tr>
</tbody>
</table>
</div>
<p>”</p>
<p>Cleverpig said“</p>
<div style="margin: 5px 20px 20px;">
<div class="smallfont" style="margin-bottom: 2px;">Quote:</div>
<table border="0" cellspacing="0" cellpadding="6" width="100%">
<tbody>
<tr>
<td class="alt2" style="border: 1px inset;">to qinjiwy：这个边收听边下载的方法可以作为一个应用程序选项，因为并不是每个人都需要不间断的听，也许只想听第一段试试看，如果好的话再继续听下去。而且有些人还可能直接从中间的部分收听，如果这时文件变大的话，可能等待时间更长。</td>
</tr>
</tbody>
</table>
</div>
<p>”</p>

	<h4>相关文章</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.donevii.com/post/461.html" title="[转] J2me流媒体技术实现讨论[2] (2008-08-31)">[转] J2me流媒体技术实现讨论[2]</a> (0)</li>
	<li><a href="http://www.donevii.com/post/459.html" title="[转] J2me流媒体技术实现讨论[1] (2008-08-31)">[转] J2me流媒体技术实现讨论[1]</a> (0)</li>
	<li><a href="http://www.donevii.com/post/354.html" title="[转] MTK平台芯片概说 (2007-11-26)">[转] MTK平台芯片概说</a> (0)</li>
	<li><a href="http://www.donevii.com/post/37.html" title="成年人禁！HighRing手机铃声“无声胜有声” (2006-08-23)">成年人禁！HighRing手机铃声“无声胜有声”</a> (0)</li>
	<li><a href="http://www.donevii.com/post/568.html" title="山寨机教父蔡明介:联发科10年迅速崛起的秘诀 (2008-10-15)">山寨机教父蔡明介:联发科10年迅速崛起的秘诀</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.donevii.com/post/463.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[转] J2me流媒体技术实现讨论[2]</title>
		<link>http://www.donevii.com/post/461.html</link>
		<comments>http://www.donevii.com/post/461.html#comments</comments>
		<pubDate>Sun, 31 Aug 2008 11:15:12 +0000</pubDate>
		<dc:creator>gavinkwoe</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[mtk]]></category>
		<category><![CDATA[video & audio]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[j2me]]></category>
		<category><![CDATA[stream]]></category>
		<category><![CDATA[流媒体]]></category>

		<guid isPermaLink="false">http://www.donevii.com/?p=461</guid>
		<description><![CDATA[cleverpig said“

Quote:



之所以有些格式的媒体文件不支持分段播放，是因为它们文件中不含有索引信息。
就像在以顺序方式读取文件时无法seek一样。。
这个问题可以通过人工（或者用程序）将... ]]></description>
			<content:encoded><![CDATA[<p>cleverpig said“</p>
<div style="margin: 5px 20px 20px;">
<div class="smallfont" style="margin-bottom: 2px;">Quote:</div>
<table border="0" cellspacing="0" cellpadding="6" width="100%">
<tbody>
<tr>
<td class="alt2" style="border: 1px inset;">之所以有些格式的媒体文件不支持分段播放，是因为它们文件中不含有索引信息。<br />
就像在以顺序方式读取文件时无法seek一样。。<br />
这个问题可以通过人工（或者用程序）将文件分割后部署放到服务器上来解决。</td>
</tr>
</tbody>
</table>
</div>
<p>”<br />
以及“</p>
<div style="margin: 5px 20px 20px;">
<div class="smallfont" style="margin-bottom: 2px;">Quote:</div>
<table border="0" cellspacing="0" cellpadding="6" width="100%">
<tbody>
<tr>
<td class="alt2" style="border: 1px inset;">随着iTunes4.9版的发布，podcaster（pod播客们）能够建立自己的podcast，并可以通过增加幻灯片式的图片使其更加吸引人。而且 在附加信息中的URL还可使用户门自由的找到其他的podcast资源。这成为了podcast世界的“大地震”。目前这一特性移植到手机上是通过划分“ 章节”来完成的，即将podcast资源文件划分为多个章节，这样做才能让没有“重播/定位”能力的手机进行播放。</p>
<p>但是另一个挑战将摆在移动用户面前，例如：移动收听必须对中断事件进行管理。当我们正开始播放20-40分钟的podcast时，一个电话或者短信突然到 来，这些情况将使播放被迫中断。此时我们只能选择重新打开podcast从头再听或者是没有心情从头听。另外媒体文件格式问题也是对移动用户的“噩梦”， 大多数手机都不支持mp3或者AAC这种podcast的文件格式，但它们都支持.3gp的标准AMR格式文件。而且能够保存几兆mp3或者AAC文件） 的手机目前也不是很普及。</p>
<p>但是Tea Vui Huang制作的javacast改变了这一切。这个软件就是将mp3音乐转换为手机可以播放的.3gp 标准amr（audio recording format）格式。大家可以到<a href="http://www.ringtone4me.com/%E7%9C%8B%E7%9C%8B%EF%BC%8C%E4%B8%8A%E9%9D%A2%E6%9C%89%E4%B8%80%E4%BA%9B%E5%85%B7%E6%9C%89%E6%AD%A4%E7%B1%BB%E5%8A%9F%E8%83%BD%E8%BD%AF%E4%BB%B6%E9%93%BE%E6%8E%A5%E3%80%82" target="_blank">http://www.ringtone4me.com/看看，上面有一些具有此类功能软件链接。</a></p>
<p>javacast的作者——Tea Vui Huang也是Mobcast的作者, 已经制作了一套处理工具将转换Podcast到一个java Midlet中（用户只需要在手机中调用javacast无线下载这个j2me应用程序，并可以播放podcast）。这使那些podcasters们通 过简单的增加一个下载这个midlet的链接就能很容易是获得他们的podcast。</td>
</tr>
</tbody>
</table>
</div>
<p>”</p>
<p>Huang的Mobcast，确实非常著名，几个月以前，在我写toodouPodcastMidlet时就看过许多人介绍过他，但是就是连不上<a href="http://www.geocities.com/tvhuangsg/mobcast/%E8%BF%99%E4%B8%AA%E5%9C%B0%E5%9D%80%EF%BC%8C%E6%89%80%E4%BB%A5%E4%B8%80%E7%9B%B4%E6%9C%AA%E7%9D%B9%E7%9C%9F%E5%AE%B9%E3%80%82" target="_blank">http://www.geocities.com/tvhuangsg/m&#8230;��睹真容。</a></p>
<p>转换各种格式的video为3gp，转换各种格式的audio为amr，这些在开源软件mplayer手下是随手拈来，只需要看懂mplayer的各种参数即可做到了。所以拜mplayer所赐，我也能够制作手机看交通实况录像，都要感谢那些mplayer的开发人员！</p>
<p>&#8220;移动收听必须对中断事件进行管理&#8221;，这个确实需要考虑。当进入Paused状态时，需要通知播放线程暂停，同时连接线程暂时就不要去抓取服务器的媒体数据了；等界面切换回来后，播放线程继续replay，连接线程继续下载音乐。</p>
<p>斑竹说“可以通过人工（或者用程序）将文件分割后部署放到服务器上来解决”，我想也是，简单的文件分割是不够的，或者说仅仅适合于wav这种原始数据格 式。应该事先将音乐文件用mencoder分解成一段一段的音乐文件放在服务器上，mencoder将处理每一段的格式问题保证能独立播放，这样手机下载 起来只需要按照编号一段一段地下载即可，服务器不再需要运算和添加头信息。</p>
<p>美中不足，如果两个player切换播放，中间会有一个卡啪声。</p>
<p>cleverpig said“</p>
<div style="margin: 5px 20px 20px;">
<div class="smallfont" style="margin-bottom: 2px;">Quote:</div>
<table border="0" cellspacing="0" cellpadding="6" width="100%">
<tbody>
<tr>
<td class="alt2" style="border: 1px inset;">有兴趣的话可以看jffmpeg，是一种能够处理音频视频的java媒体框架。</td>
</tr>
</tbody>
</table>
</div>
<p>”以及</p>
<p>“</p>
<div style="margin: 5px 20px 20px;">
<div class="smallfont" style="margin-bottom: 2px;">Quote:</div>
<table border="0" cellspacing="0" cellpadding="6" width="100%">
<tbody>
<tr>
<td class="alt2" style="border: 1px inset;">想了一下，提出一个“移动音频流网关”的想法：可以使用服务器采用“实时”转化格式的方式，将mp3、wav等格式音频转换为amr格式，当然也可以做分 段，无论音频源是什么（甚至是podcast）都可以下载到手机上收听。但这样做的话，服务器的负载是个问题，尽管已用采集过的音频源不用再次处理。</td>
</tr>
</tbody>
</table>
</div>
<p>”</p>
<p>其实，我原来写的toodouPodcast就是这么一个概念，由于那些播客们提供的音乐格式不符合手机播放，所以我都用toodouPodcast这么 个java web service调用ffmpeg工具进行音频转换。转换格式，确实是一个很费CPU资源的事情，而且时间很长，如果用户多的话，对服务器压力极大。<br />
那么现在做做分段也不错，这样，更适合手机用户。<br />
Jffmpeg应该是对ffmpeg这个C编写的工具的Java封装。</p>
<p>另一个封装的是<br />
<a href="http://fobs.sourceforge.net/" target="_blank">http://fobs.sourceforge.net/</a><br />
FOBS, the C++ &amp; JMF wrapper for ffmpeg.</p>

	<h4>相关文章</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.donevii.com/post/463.html" title="[转] J2me流媒体技术实现讨论[3] (2008-08-31)">[转] J2me流媒体技术实现讨论[3]</a> (0)</li>
	<li><a href="http://www.donevii.com/post/459.html" title="[转] J2me流媒体技术实现讨论[1] (2008-08-31)">[转] J2me流媒体技术实现讨论[1]</a> (0)</li>
	<li><a href="http://www.donevii.com/post/354.html" title="[转] MTK平台芯片概说 (2007-11-26)">[转] MTK平台芯片概说</a> (0)</li>
	<li><a href="http://www.donevii.com/post/37.html" title="成年人禁！HighRing手机铃声“无声胜有声” (2006-08-23)">成年人禁！HighRing手机铃声“无声胜有声”</a> (0)</li>
	<li><a href="http://www.donevii.com/post/568.html" title="山寨机教父蔡明介:联发科10年迅速崛起的秘诀 (2008-10-15)">山寨机教父蔡明介:联发科10年迅速崛起的秘诀</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.donevii.com/post/461.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[转] J2me流媒体技术实现讨论[1]</title>
		<link>http://www.donevii.com/post/459.html</link>
		<comments>http://www.donevii.com/post/459.html#comments</comments>
		<pubDate>Sun, 31 Aug 2008 11:13:08 +0000</pubDate>
		<dc:creator>gavinkwoe</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[mtk]]></category>
		<category><![CDATA[video & audio]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[j2me]]></category>
		<category><![CDATA[stream]]></category>
		<category><![CDATA[流媒体]]></category>

		<guid isPermaLink="false">http://www.donevii.com/?p=459</guid>
		<description><![CDATA[看到很多很多人持续在问这个问题。
以前我也听说，好像kvm底层实现不太支持j2me来做streaming video/audio，但我不知道那人为什么这么说。
那么现在国外有一个人提出下面这种思路，并且号称在No... ]]></description>
			<content:encoded><![CDATA[<p>看到很多很多人持续在问这个问题。</p>
<p>以前我也听说，好像kvm底层实现不太支持j2me来做streaming video/audio，但我不知道那人为什么这么说。</p>
<p>那么现在国外有一个人提出下面这种思路，并且号称在Nokia6260[相关数据：诺基亚 6260 Nokia62602.0 (3.0436.0) SymbianOS7.0s Series602.1 ProfileMIDP-2.0 ConfigurationCLDC-1.0]</p>
<p>上真实实现了(两种网络方式：蓝牙和GPRS都试验过)，但我怀疑他的前提条件是“你的手机必须允许同时实现player的多个实例进入prefetched状态（预读取声音流）”：</p>
<p>第一步：<br />
声明两个Player；</p>
<p>第二步：<br />
HttpConnection开始向服务器请求该audio文件的第一部分字节，我们定这次读取的字节数为18KB；</p>
<p>第三步：<br />
等第一部分数据到位后，Player A开始realize和prefetch，并开始播放；</p>
<p>第四步：<br />
在Player A播放同时，(18KB的amr数据可以播放10秒钟)，HttpConnection继续请求第二部分数据(假设GPRS每秒钟传输3KB，那么18KB需要传输6秒，算上前后通讯损失的时间，应该不会超过10秒钟)；</p>
<p>第五步：<br />
第二部分数据到位后，假设Player A还没有播放完(这需要调整你的每一部份数据字节数来使得假设成立)，那么将数据喂给Player B让它realize和prefetch；</p>
<p>第六步：<br />
Player A播放完后，得到事件通知，于是让Player B开始播放。</p>
<p>如此往复。</p>
<p>大家看看此种理论可否。<br />
我自己在nokia 7610上测试了一下，我上面说的前提被证明是可行的：“你的手机必须允许同时实现player的多个实例进入prefetched状态（预读取声音流）”。真实Nokia手机确实可以如此：<br />
两个线程中各自有一个Player，都开始做m_player.realize();和m_player.prefetch();，然后等候。</p>
<p>先播放线程1的Player，等她播放完后，<br />
通过</p>
<div style="margin: 5px 20px 20px;">
<div class="smallfont" style="margin-bottom: 2px;">Code:</div>
<pre class="alt2" style="border: 1px inset; margin: 0px; padding: 6px; overflow: auto; width: 620px; height: 242px; text-align: left;" dir="ltr">/*
   * 本类实现了PlayerListener接口。通过这个事件来告知媒体已经播放完毕
   */
  public void playerUpdate(Player player, String event, Object data){
    if(event == PlayerListener.END_OF_MEDIA){
     try{
     System.out.println("playerUpdate&gt;&gt;PlayerListener.END_OF_MEDIA");
     stopGauge();
     playForeground();
     }catch(Exception e){
     e.printStackTrace();
    }
   }
 }</pre>
</div>
<p>来通知第二个线程的Player播放。</p>
<p>这样是可以的。<br />
qinjiwy说“可以,不过前提是该音频文件允许分段播放,有些音频文件就是不允许的.”，你说得对。确实有很多格式的媒体文件不支持分段播放。我所知道的是wav可以，mp3也可以。</p>
<p>服务端每次只读取这两种媒体文件的某一部分，如果是mp3文件的话，我暂时不知道是否每次需要加上特殊的头信息。</p>
<p>但是如果是WAV文件，那么肯定每次都要加上WAV特定的头，要不然Player也无法播放。</p>
<p>这种形式肯定是可行的。因为以前我在VC++上写Text To Speech程序时，就是这么做的：WAV文件的前若干个字节肯定是头信息，这是一定的，随后跟的全是RAW DATA；我每一次读取WAV的RAW DATA若干字节后，传给我的播放线程，他需要给这段RAW DATA前加上一个WAV HEADER，然后就可以正常播放了。</p>

	<h4>相关文章</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.donevii.com/post/463.html" title="[转] J2me流媒体技术实现讨论[3] (2008-08-31)">[转] J2me流媒体技术实现讨论[3]</a> (0)</li>
	<li><a href="http://www.donevii.com/post/461.html" title="[转] J2me流媒体技术实现讨论[2] (2008-08-31)">[转] J2me流媒体技术实现讨论[2]</a> (0)</li>
	<li><a href="http://www.donevii.com/post/354.html" title="[转] MTK平台芯片概说 (2007-11-26)">[转] MTK平台芯片概说</a> (0)</li>
	<li><a href="http://www.donevii.com/post/37.html" title="成年人禁！HighRing手机铃声“无声胜有声” (2006-08-23)">成年人禁！HighRing手机铃声“无声胜有声”</a> (0)</li>
	<li><a href="http://www.donevii.com/post/568.html" title="山寨机教父蔡明介:联发科10年迅速崛起的秘诀 (2008-10-15)">山寨机教父蔡明介:联发科10年迅速崛起的秘诀</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.donevii.com/post/459.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>(转)lucene安装</title>
		<link>http://www.donevii.com/post/301.html</link>
		<comments>http://www.donevii.com/post/301.html#comments</comments>
		<pubDate>Wed, 31 Jan 2007 07:46:02 +0000</pubDate>
		<dc:creator>gavinkwoe</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[lucene]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[安装]]></category>
		<category><![CDATA[测试]]></category>
		<category><![CDATA[车东]]></category>

		<guid isPermaLink="false">http://www.donevii.com/?p=301</guid>
		<description><![CDATA[网上有许多lucene的材料，中文材料大家看的都是车东的那篇(http://www.chedong.com/tech/lucene.html)，而大家在网上讨论最多的是中文的全文检索，而对中文的全文检索最有影响力的文章，还是车东写的... ]]></description>
			<content:encoded><![CDATA[<p>网上有许多lucene的材料，中文材料大家看的都是车东的那篇(http://www.chedong.com/tech/lucene.html)，而大家在网上讨论最多的是中文的全文检索，而对中文的全文检索最有影响力的文章，还是车东写的那篇weblucene(http://www.chedong.com/tech/weblucene.html)，但那些都是lucene1.2版本的事，现在不同了，lucene1.3-final据称完全支持中文的全文检索了。<br />
因为在lucene1.3-final.zip包中的changes.txt中的第五项描述如下：<br />
5. Fix StandardTokenizer’s handling of CJK characters (Chinese,<br />
 Japanese and Korean ideograms). Previously contiguous sequences<br />
 were combined in a single token, which is not very useful. Now<br />
 each ideogram generates a separate token, which is more useful.<br />
这说明lucene1.3-final可以检索中日韩等表意文字了。<br />
<br />
测试一下：<br />
测试环境：windows 2000 pro,jdk1.3.1或以上版本<br />
1、下载lucene-1.3-final.zip。<br />
<br />
2、解压lucene-1.3-final.zip，并将其中的lucene-1.3-final.jar和lucene-demos-1.3-final.jar加入到系统的classpath中。<br />
<br />
3、建一个目录，并将一些html或txt文件（文件内容要中文的！）拷入到这个目录中，作为全文检索的材料。如：建一个目录d:\lucenetest\index，在其中拷入一些中文内容的文件，其中也可以有多级子目录的。<br />
OK，环境准备好了，可以试验了！<br />
<br />
4、进入dos模式，输入命令：java org.apache.lucene.demo.IndexFiles d:\lucenetest\index<br />
如：c:\&gt;java org.apache.lucene.demo.IndexFiles d:\lucenetest\index 回车，这时会索引d:\lucenetest\index目录下的所有文件，包括子目录中的文件，并将索引文件写入：c:\index目录中（自动创建的,根据你的dos符起始路径，将在其下建index目录）。<br />
好，索引建完了，下面试验检索。<br />
<br />
5、输入命令：java org.apache.lucene.demo.SearchFiles<br />
如：c:\&gt;java org.apache.lucene.demo.SearchFiles 回车<br />
Query:在这里输入检索内容，如：“建议最好自己先做一下语法检查”，这么长：）<br />
成功了，结果出来了：<br />
Searching for: “建 议 最 好 自 己 先 做 一 下 语 法 检 查”<br />
1 total matching documents<br />
0. d:\lucenetest\index\学习Lucene的一点心得.txt<br />
可以看出lucene-1.3-final完全支持中文的全文检索了，使用的是单字切分！！</p>

	<h4>相关文章</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.donevii.com/post/110.html" title="翻译：On having layout (2006-10-24)">翻译：On having layout</a> (0)</li>
	<li><a href="http://www.donevii.com/post/78.html" title="[转]C/C++/Perl/汇编/Java效率比较 (2006-10-11)">[转]C/C++/Perl/汇编/Java效率比较</a> (0)</li>
	<li><a href="http://www.donevii.com/post/283.html" title="免费软件套装 (2007-01-08)">免费软件套装</a> (0)</li>
	<li><a href="http://www.donevii.com/post/640.html" title="二十一世纪让人悲伤的七个原因 (2008-12-01)">二十一世纪让人悲伤的七个原因</a> (0)</li>
	<li><a href="http://www.donevii.com/post/387.html" title="[转]嵌入式系统 Boot Loader 技术内幕 (2008-01-14)">[转]嵌入式系统 Boot Loader 技术内幕</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.donevii.com/post/301.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>为lucene加入简单中文分词</title>
		<link>http://www.donevii.com/post/300.html</link>
		<comments>http://www.donevii.com/post/300.html#comments</comments>
		<pubDate>Wed, 31 Jan 2007 07:44:04 +0000</pubDate>
		<dc:creator>gavinkwoe</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[类]]></category>

		<guid isPermaLink="false">http://www.donevii.com/?p=300</guid>
		<description><![CDATA[看到很多人做lucene的应用时候都要面临中文分词怎么加的问题，下面介绍一个简单的中文词库，这个词库附带相应的算法，数据结构学过的人看懂没什么问题，只要简单的构造一个对象，就可... ]]></description>
			<content:encoded><![CDATA[<p><font size="2">看到很多人做lucene的应用时候都要面临中文分词怎么加的问题，下面介绍一个简单的中文词库，这个词库附带相应的算法，数据结构学过的人看懂没什么问题，只要简单的构造一个对象，就可以分词了，对于不是太大的应用来说，还是相当可行的，</font><a href="http://maxwolf.cnblogs.com/Files/maxwolf/ChineseSegmenter.rar"><font size="2">点击下载<br />
</font></a><font size="2">      该分词库使用很简单，先初试化该类<br />
      ChineseSegmenter seg = ChineseSegmenter.getGBSegmenter();<br />
      然后调用seg.segmentLine(&#8220;要分词的中文段&#8221;, &#8221; &#8220;)//第二个参数为分词之间以什么间隔<br />
      <span style="font-size: 10pt">譬如</span></font><font size="3">    </font><span style="font-size: 10pt">输出为儿童 节日 儿童节   <br />
    <br />
     下面简要说以下如何加到搜索代码里，<br />
      lucene 建立索引的代码引入的analysis分词法为 WhitespaceAnalyzer<br />
      import org.apache.lucene.analysis.WhitespaceAnalyzer;</span><span style="font-size: 10pt"></p>
<p style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; width: 98%; word-break: break-all; padding-top: 4px; background-color: #eeeeee; border: #cccccc 1px solid"><span style="color: #000000">  IndexWriter writer </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> IndexWriter(Directory, </span><span style="color: #0000ff">new</span><span style="color: #000000"> WhitespaceAnalyzer(),</span><span style="color: #0000ff">true</span><span style="color: #000000">);     </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> AddDocument(String Title , String Content , ..)<br />
    {<br />
        Document doc </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> Document();<br />
        <br />
        ChineseSegmenter cs</span><span style="color: #000000">=</span><span style="color: #000000"> ChineseSegmenter.getGBSegmenter();    </span><span style="color: #008000">//</span><span style="color: #008000">初始化该类</span><span style="color: #008000"><br />
</span><span style="color: #000000">        <br />
            doc.add(Field.Text(</span><span style="color: #000000">&#8220;</span><span style="color: #000000">content</span><span style="color: #000000">&#8220;</span><span style="color: #000000">, cs.segmentLine(Content, </span><span style="color: #000000">&#8220;</span><span style="color: #000000"> </span><span style="color: #000000">&#8220;</span><span style="color: #000000">))); </span><span style="color: #008000">//</span><span style="color: #008000"> 将分好的词写进索引 </span><span style="color: #008000"><br />
</span><span style="color: #000000">    <br />
            doc.add(Field.Text(</span><span style="color: #000000">&#8220;</span><span style="color: #000000">title</span><span style="color: #000000">&#8220;</span><span style="color: #000000">, cs.segmentLine(Title, </span><span style="color: #000000">&#8220;</span><span style="color: #000000"> </span><span style="color: #000000">&#8220;</span><span style="color: #000000">)));</span><span style="color: #000000">        <span style="color: #0000ff">try</span><span style="color: #000000"><br />
        {<br />
            writer.addDocument(doc);<br />
        }<br />
        </span><span style="color: #0000ff">catch</span><span style="color: #000000">(IOException e)<br />
        {<br />
            System.</span><span style="color: #0000ff">out</span><span style="color: #000000">.println(</span><span style="color: #000000">&#8220;</span><span style="color: #000000">wrong</span><span style="color: #000000">&#8220;</span><span style="color: #000000">);<br />
            e.printStackTrace();<br />
        }<br />
    }</span></p>
<p></span></p>
<p></span>        上面建立索引时候为把文章的标题和内容进行断词然后存入了索引, 搜索的时候同样用WhitespaceAnalyzer,<br />
 然后把结果hit中的结果合并就可以了.<font size="3"> </font></p>
<p style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; width: 98%; word-break: break-all; padding-top: 4px; background-color: #eeeeee; border: #cccccc 1px solid"><span style="color: #000000"> </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) throws Exception </span><span style="display: none; background-color: #ffffff; border: #808080 1px solid" id="Codehighlighter1_57_188_Closed_Text"></span><span id="Codehighlighter1_57_188_Open_Text"><span style="color: #000000">{      ChineseSegmenter seg <span style="color: #000000">=</span><span style="color: #000000"> ChineseSegmenter.getGBSegmenter();<br />
      System.</span><span style="color: #0000ff">out</span><span style="color: #000000">.println(seg.segmentLine(</span><span style="color: #000000">&#8220;</span><span style="color: #000000">儿童节日</span><span style="color: #000000">&#8220;</span><span style="color: #000000">, </span><span style="color: #000000">&#8220;</span><span style="color: #000000"> </span><span style="color: #000000">&#8220;</span><span style="color: #000000">));<br />
    <br />
   }</span></p>
<p></span></span></p>

	<h4>相关文章</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.donevii.com/post/72.html" title="龙虎，门都没有 (2006-10-09)">龙虎，门都没有</a> (0)</li>
	<li><a href="http://www.donevii.com/post/586.html" title="评论:Web2.0用户之殇[转自cnbeta] (2008-10-21)">评论:Web2.0用户之殇[转自cnbeta]</a> (0)</li>
	<li><a href="http://www.donevii.com/post/343.html" title="被误传了几千年的七句话 (2007-07-16)">被误传了几千年的七句话</a> (0)</li>
	<li><a href="http://www.donevii.com/post/110.html" title="翻译：On having layout (2006-10-24)">翻译：On having layout</a> (0)</li>
	<li><a href="http://www.donevii.com/post/76.html" title="给所有女孩的一封信 (2006-10-10)">给所有女孩的一封信</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.donevii.com/post/300.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
