<?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>Information Retrieval Blog &#187; 压缩</title>
	<atom:link href="http://blog.zye.me/tag/%e5%8e%8b%e7%bc%a9/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.zye.me</link>
	<description>REAL TIME DATA PROCESSING, DISTRIBUTED COMPUTING, PATTERN DISCOVERY</description>
	<lastBuildDate>Wed, 08 Feb 2012 17:33:32 +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>用Deflater压缩序列化对象&#8211;备忘</title>
		<link>http://blog.zye.me/2011/05/18194.html</link>
		<comments>http://blog.zye.me/2011/05/18194.html#comments</comments>
		<pubDate>Sat, 28 May 2011 14:27:48 +0000</pubDate>
		<dc:creator>yezheng</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Deflater]]></category>
		<category><![CDATA[信息检索]]></category>
		<category><![CDATA[压缩]]></category>

		<guid isPermaLink="false">http://www.5yiso.cn/2008/03/18194.html</guid>
		<description><![CDATA[一个简单的工具类，把一个对象序列化并压缩存储。顺便也补充一下上次发的关于java压缩与解压的整理文章，加入一个用Deflater和Inflater类压缩和解压的例子。 /** * class ObjectSerializer */ package irlab.util; import gov.nih.nlm.nls.utils.Debug; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.zip.*; import java.util.*; /** * the main function of this class is to serialzie and compress an object * @author yezheng *@Fun: serializer an object *the main function of this <a href='http://blog.zye.me/2011/05/18194.html'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>一个简单的工具类，把一个对象序列化并压缩存储。顺便也补充一下上次发的关于java压缩与解压的整理文章，加入一个用Deflater和Inflater类压缩和解压的例子。</p>
<p> <span id="more-18194"></span>
<p>/** <br />* class ObjectSerializer <br />*/ <br />package irlab.util;</p>
<p>import gov.nih.nlm.nls.utils.Debug;</p>
<p>import java.io.BufferedInputStream; <br />import java.io.BufferedOutputStream; <br />import java.io.ByteArrayInputStream; <br />import java.io.ByteArrayOutputStream; <br />import java.io.IOException; <br />import java.io.ObjectInputStream; <br />import java.io.ObjectOutputStream; <br />import java.util.zip.*; <br />import java.util.*;</p>
<p>/** <br />* the main function of this class is to serialzie and compress an object <br />* @author yezheng <br /><a href="mailto:*@Fun">*@Fun</a>: serializer an object <br />*the main function of this class is to serialzie and compress an object <br />* <br />*/ <br />public class ObjectSerializer { </p>
<p>public static byte[] serializeObject_compress(Object pObject){ <br />return serializeObject(pObject, true); <br />} </p>
<p>/** <br />* <br />* @param pObject <br />* @param tag, if true,then compress <br />* @return <br />* @throws Exception <br />*/ <br />public static byte[] serializeObject(Object pObject, boolean tag) { <br />byte[] returnValue = new byte[0]; <br />try { <br />ByteArrayOutputStream byteStream = new ByteArrayOutputStream(5000); <br />ObjectOutputStream os = new ObjectOutputStream( <br />new BufferedOutputStream(byteStream)); <br />os.flush(); <br />os.writeObject(pObject); <br />os.flush(); <br />// retrieves byte array <br />if (tag) { <br />returnValue = compressBytes(byteStream.toByteArray()); <br />} else { <br />returnValue = byteStream.toByteArray(); <br />}</p>
<p>os.close(); <br />os = null; <br />} catch (Exception e) { <br />e.printStackTrace(); <br />} <br />return (returnValue);</p>
<p>} // ***End public byte[] serializeObject (Object pObject)</p>
<p>// ================================================|Public Method <br />// Header|====</p>
<p>/** <br />* Method unSerializeObject <br />* <br />* @param pBytes <br />* @param tag, if true, need to uncompress first <br />* @return Object <br />* @exception Exception <br />* <br />*/ <br />// ================================================|Public Method <br />// Header|==== <br />public static Object unSerializeObject(byte[] pBytes, boolean tag) { <br />Object returnValue = null; <br />try { <br />if (true) { <br />pBytes = decompressBytes(pBytes); <br />} <br />ByteArrayInputStream byteStream = new ByteArrayInputStream(pBytes); <br />ObjectInputStream is = new ObjectInputStream( <br />new BufferedInputStream(byteStream)); <br />returnValue = is.readObject(); <br />is.close(); <br />} catch (Exception e) { <br />e.printStackTrace(); <br />}</p>
<p>return (returnValue);</p>
<p>} // ***End public Object unSerializeObject (byte[] pBytes ) </p>
<p>public static Object unSerializeObject_decompress(byte[] pBytes) <br />{ <br />return unSerializeObject(pBytes, true); <br />} </p>
<p>/** <br />* use class Inflater to decompress data <br />* <br />* @param input <br />* @return <br />*/ <br />public static byte[] compressBytes(byte input[]) { <br />compresser.reset();//do not forgot this statement, <br />compresser.setInput(input); <br />compresser.finish();//do not forgot this statement, <br />byte output[] = new byte[0]; <br />ByteArrayOutputStream o = new ByteArrayOutputStream(input.length); <br />try { <br />byte[] buf = new byte[cachesize]; <br />int got; <br />while (!compresser.finished()) { <br />got = compresser.deflate(buf); <br />o.write(buf, 0, got); <br />} <br />output = o.toByteArray(); <br />// System.out.println(&#8220;len after compress: &#8221; +output.length); <br />} finally { <br />try { <br />o.close(); <br />} catch (IOException e) { <br />// TODO Auto-generated catch block <br />e.printStackTrace(); <br />} <br />} <br />return output; <br />} <br />/** <br />* use class Deflater to compress data <br />* @param input <br />* @return <br />*/ <br />public static byte[] decompressBytes(byte input[]) <br />{ <br />byte output[] = new byte[0]; <br />decompresser.reset(); <br />decompresser.setInput(input); <br />ByteArrayOutputStream o = new ByteArrayOutputStream(input.length); <br />try { </p>
<p>byte[] buf = new byte[cachesize]; <br />int got; <br />while (!decompresser.finished()) { <br />got = decompresser.inflate(buf); <br />o.write(buf, 0, got); <br />} <br />output = o.toByteArray(); <br />// System.out.println(&#8220;len after decompress: &#8221; +output.length); <br />}catch(Exception e) <br />{ <br />e.printStackTrace(); <br />}finally { <br />try { <br />o.close(); <br />} catch (IOException e) { <br />// TODO Auto-generated catch block <br />e.printStackTrace(); <br />} <br />} </p>
<p>return output; <br />} </p>
<p>public static void test(){ <br />String inputString = &#8220;blahblahblah8888888888888888888888888888888888888888888888999&#8243;; <br />System.out.println(inputString); </p>
<p>byte input[] = inputString.getBytes(); <br />System.out.println(&#8220;original len = &#8221; + input.length); </p>
<p>byte output[]= decompressBytes(compressBytes(input)); <br />String outputstring = new String(output); <br />System.out.println(outputstring); <br />} </p>
<p>public static void testObject() </p>
<p>{ <br />HashMap map = new HashMap(); <br />map.put(&#8220;111111&#8243;, &#8220;v1111111&#8243;); <br />map.put(&#8220;22222222&#8243;, &#8220;v2111112&#8243;); <br />map.put(&#8220;333333&#8243;, &#8220;v3333333333&#8243;); <br />map.put(&#8220;444444444&#8243;, &#8220;v4444444&#8243;); <br />byte byteobj[] = serializeObject_compress(map); <br />byte byteobj1[] = serializeObject(map, false); <br />System.out.println(&#8220;size com:&#8221; + byteobj.length); <br />System.out.println(&#8220;size uncom:&#8221; + byteobj1.length); <br />HashMap map1 = (HashMap) unSerializeObject_decompress(byteobj); <br />if(map1.containsKey(&#8220;1&#8243;)) <br />{ <br />System.out.println(&#8220;sucessed&#8221;); <br />} <br />} </p>
<p>public static void setCachesize(int size) <br />{ <br />if(size &lt;1 || (size%256) !=0 ) <br />{ <br />return; <br />} <br />cachesize = size; <br />} </p>
<p>/** <br />* @param args <br />* @throws Exception <br />*/ <br />public static void main(String[] args) throws Exception { <br />// TODO Auto-generated method stub <br />// Encode a String into bytes <br />// String inputString = &#8220;blahblahblah8888888888888888888888888888888888888888888888999&#8243;; <br />// test(); <br />testObject(); </p>
<p>} </p>
<p>private static Deflater compresser = new Deflater(); <br />private static Inflater decompresser = new Inflater(); <br />private static int cachesize = 1024;</p>
<p>} </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zye.me/2011/05/18194.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用Java Tar Package读取*.tar 或*.tar.gz 文件</title>
		<link>http://blog.zye.me/2009/06/53089.html</link>
		<comments>http://blog.zye.me/2009/06/53089.html#comments</comments>
		<pubDate>Fri, 26 Jun 2009 02:10:20 +0000</pubDate>
		<dc:creator>yezheng</dc:creator>
				<category><![CDATA[information Retrieval]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Java Tar Package]]></category>
		<category><![CDATA[压缩]]></category>

		<guid isPermaLink="false">http://blog.so8848.com/?p=53089</guid>
		<description><![CDATA[使用Java Tar Package读取*.tar 或*.tar.gz 文件 Java Tar Package com.ice.tar 实现了一个tar 文档输入输出io包。使用方式接近java 中自带的 java.util.zip 包，所以也该非常容易上手，如果使用国java的zip包的话。 而且配合java 的中的GZIPInputStream 使用，就很容易实现.tar.gz 文件的访问。 步骤： 1. 读取文件，生成GZIPInputStream 流 2. 把1中生成的GZIPInputStream流传给 Java Tar Package 中的TarInputStream 流 过程非常简单，代码如下 private void visitTARGZ(P parser, File targzFile) throws IOException { FileInputStream fileIn = null; BufferedInputStream bufIn = null; GZIPInputStream gzipIn = null; TarInputStream taris = null; <a href='http://blog.zye.me/2009/06/53089.html'>[...]</a>]]></description>
			<content:encoded><![CDATA[<h1><strong>使用Java Tar Package读取*.tar 或*.tar.gz 文件</strong></h1>
<p>Java Tar Package com.ice.tar 实现了一个tar 文档输入输出io包。使用方式接近java 中自带的 java.util.zip 包，所以也该非常容易上手，如果使用国java的zip包的话。</p>
<p>而且配合java 的中的GZIPInputStream 使用，就很容易实现.tar.gz 文件的访问。<br />
步骤：<br />
<strong>1. 读取文件</strong>，生成GZIPInputStream 流<br />
2. 把1中<strong>生成</strong>的GZIPInputStream流传给 Java Tar Package 中的TarInputStream 流<br />
过程非常简单，代码如下<br />
private void visitTARGZ(P parser, File targzFile) throws IOException {<br />
FileInputStream fileIn = null;<br />
BufferedInputStream bufIn = null;<br />
GZIPInputStream gzipIn = null;<br />
TarInputStream taris = null;<br />
try {<br />
fileIn = new FileInputStream(targzFile);<br />
bufIn = new BufferedInputStream(fileIn);<br />
gzipIn = new GZIPInputStream(bufIn); //first unzip the input file stream.<br />
taris = new TarInputStream(gzipIn);</p>
<p>TarEntry entry = null;<br />
while ((entry = taris.getNextEntry()) != null) {<br />
if (entry.isDirectory())<br />
continue;<br />
configure(taris, entry.getFile()); //process every entry in this tar file.<br />
}<br />
} finally {<br />
taris.close();<br />
gzipIn.close();<br />
bufIn.close();<br />
fileIn.close();<br />
}<br />
}</p>
<p>TarInputStream 是FilterInputStream的子类，这样所用操作又回到Java中流的概念了。 TarInputStream 提供迭代访问tar归档中所有entry文件， 其方式与ZipInputStream风常相似。</p>
<p>TarOutputStream 当然用法也类似了。</p>
<p><strong>更多参考其官方主页：</strong> http://www.trustice.com/index.shtml<br />
<strong>下载地址：</strong>http://www.trustice.com/java/tar/</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zye.me/2009/06/53089.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

