<?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>{finalbug} &#187; Java</title>
	<atom:link href="http://finalbug.org/tag/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://finalbug.org</link>
	<description>Keep it simple &#38; stupid</description>
	<lastBuildDate>Sun, 05 Feb 2012 13:27:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>一种让swf文件不写入浏览器缓存的实现方法</title>
		<link>http://finalbug.org/2007/06/8/</link>
		<comments>http://finalbug.org/2007/06/8/#comments</comments>
		<pubDate>Fri, 29 Jun 2007 02:57:06 +0000</pubDate>
		<dc:creator>Tang Bin</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://finalbug.cn/?p=8</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>通过AS3的Loader.loadBytes方法和Java的Socket服务器来实现。AS3的Loader类提供了loadBytes方法，可以通过ByteArray中读取swf，jpg，png和gif格式的文件。如果通过AS3的Socket类接收文件，然后通过Loader的loadBytes方法加载，加载后的文件因为不通过HTTP协议，将不会被写入浏览器的缓存中。<span id="more-8"></span></p>
<p>在该实现方法中，client使用的是AS3，server使用的JAVA。具体操作流程如下：</p>
<ol>
<li>（server）在服务器端创建一个新的ServerSocket，监听端口等待服务器连接；</li>
<li>（client）创建新的Socket实例，连接server；</li>
<li>（server）得到来自client的连接，获取连接信息，判断连接合法性；</li>
<li>（server）通过File类获取client需要的文件，通过DataOutputStream将此文件发送到连接通道；</li>
<li>（client）socket对象通过onData事件监听获取传输过来的二进制数据，并依次保存于一个ByteArray中；</li>
<li>（server）当文件发送完成以后，关闭client的连接；</li>
<li>（client）socket对象通过onClose事件监听得知数据发送完成；</li>
<li>（client）创建Loader对象，通过Loader的loadBytes方法加载文件。</li>
</ol>
<p>整个流程很简单，使用此方法，加载到的文件都只能在客户端的内存中运行，将不会保存在任何缓存中。</p>
<p>这整个实现过程中，因为第一次访问的必要，需要有一个loader.swf文件。此文件需要用户通过浏览器访问，因此可以在此文件中实现该加载方法，用来加载一个真正运行的swf文件。而这个关键的运行文件，将不会在缓存中出现。而用来加载的loader.swf文件，将依旧会被保存在缓存中。</p>
<p>该实现方法，只能简单的做到被加载的swf文件或者图片，是通过可控方式得到的，不会随意的被其他用户通过HTTP直接读取。但是对于彻底的文件保密，由于swf文件的执行必须在客户端实现，因此无法做到彻底屏蔽。如果用户通过内存监听或者破解loader.swf文件后，获取服务器信息并通过此服务器获取、转移并保存文件的二进制数据，这种方式也是可以被破解的。</p>
<p>至于不将文件保存在缓存导致的加载速度问题，肯定会有所影响。但是高速的缓存读取和耗时的服务器读取，必定只能选择其一，是无法避免的。</p>
<p>附带两个文件，一个是AS3的类，用来连接服务器、请求文件和加载文件。一个是JAVA类，用来处理请求并将文件发送给客户端。两个类都只是实现过程的处理展示，并不能直接独立运行。</p>
<p>点击下载：<a title="nocache.zip" href="http://tangbin.cn/wp-content/uploads/2007/06/nocache.zip">nocache.zip</a></p>
]]></content:encoded>
			<wfw:commentRss>http://finalbug.org/2007/06/8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

