[jboss-remoting-commits] JBoss Remoting SVN: r5308 - remoting2/branches/2.2/src/main/org/jboss/remoting/marshal/compress.
jboss-remoting-commits at lists.jboss.org
jboss-remoting-commits at lists.jboss.org
Mon Jul 27 22:18:42 EDT 2009
Author: ron.sigal at jboss.com
Date: 2009-07-27 22:18:42 -0400 (Mon, 27 Jul 2009)
New Revision: 5308
Modified:
remoting2/branches/2.2/src/main/org/jboss/remoting/marshal/compress/CompressingMarshaller.java
remoting2/branches/2.2/src/main/org/jboss/remoting/marshal/compress/CompressingUnMarshaller.java
Log:
JBREM-1077: Made changes suggested by Doychin Bondzhev.
Modified: remoting2/branches/2.2/src/main/org/jboss/remoting/marshal/compress/CompressingMarshaller.java
===================================================================
--- remoting2/branches/2.2/src/main/org/jboss/remoting/marshal/compress/CompressingMarshaller.java 2009-07-28 02:14:09 UTC (rev 5307)
+++ remoting2/branches/2.2/src/main/org/jboss/remoting/marshal/compress/CompressingMarshaller.java 2009-07-28 02:18:42 UTC (rev 5308)
@@ -27,6 +27,7 @@
import org.jboss.remoting.marshal.serializable.SerializableMarshaller;
import org.jboss.remoting.serialization.SerializationStreamFactory;
+import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
@@ -89,9 +90,9 @@
public void write(Object dataObject, OutputStream output, int version) throws IOException
{
output.flush();
- ;
- GZIPOutputStream gzos = new GZIPOutputStream(output);
- ObjectOutputStream oos = SerializationStreamFactory.getManagerInstance(getSerializationType()).createOutput(gzos);
+ GZIPOutputStream gzos = new SelfCleaningGZipOutputStream(output);
+ BufferedOutputStream bos = new BufferedOutputStream(gzos);
+ ObjectOutputStream oos = SerializationStreamFactory.getManagerInstance(getSerializationType()).createOutput(bos);
if(wrappedMarshaller != null)
{
@@ -105,8 +106,10 @@
super.write(dataObject, oos, version);
}
+ oos.flush();
+ bos.flush();
gzos.finish();
- oos.flush();
+ gzos.flush();
}
/**
@@ -119,6 +122,27 @@
{
return new CompressingMarshaller(wrappedMarshaller);
}
+
+
+ /**
+ * @author Doychin Bondzhev
+ */
+ static class SelfCleaningGZipOutputStream extends GZIPOutputStream
+ {
+ public SelfCleaningGZipOutputStream(OutputStream out) throws IOException
+ {
+ super(out);
+ }
+ /**
+ * Writes remaining compressed data to the output stream and closes the underlying stream.
+ * @exception IOException if an I/O error has occurred
+ */
+ public void finish() throws IOException
+ {
+ super.finish();
+ def.end(); // This will release all resources used by zlib native code
+ }
+ }
}
Modified: remoting2/branches/2.2/src/main/org/jboss/remoting/marshal/compress/CompressingUnMarshaller.java
===================================================================
--- remoting2/branches/2.2/src/main/org/jboss/remoting/marshal/compress/CompressingUnMarshaller.java 2009-07-28 02:14:09 UTC (rev 5307)
+++ remoting2/branches/2.2/src/main/org/jboss/remoting/marshal/compress/CompressingUnMarshaller.java 2009-07-28 02:18:42 UTC (rev 5308)
@@ -25,8 +25,10 @@
import org.jboss.remoting.marshal.UnMarshaller;
import org.jboss.remoting.marshal.VersionedUnMarshaller;
import org.jboss.remoting.marshal.serializable.SerializableUnMarshaller;
+import org.jboss.remoting.serialization.SerializationManager;
import org.jboss.remoting.serialization.SerializationStreamFactory;
+import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
@@ -94,19 +96,28 @@
*/
public Object read(InputStream inputStream, Map metadata, int version) throws IOException, ClassNotFoundException
{
- GZIPInputStream gzis = new GZIPInputStream(inputStream);
- ObjectInputStream ois = SerializationStreamFactory.getManagerInstance(getSerializationType()).createRegularInput(gzis);
+ SelfCleaningGZipInputStream gzis = new SelfCleaningGZipInputStream(inputStream);
+ BufferedInputStream bis = new BufferedInputStream(gzis);
+ SerializationManager manager = SerializationStreamFactory.getManagerInstance(getSerializationType());
+ ObjectInputStream ois = manager.createRegularInput(bis);
- if(wrappedUnMarshaller != null)
+ try
{
- if (wrappedUnMarshaller instanceof VersionedUnMarshaller)
- return ((VersionedUnMarshaller)wrappedUnMarshaller).read(ois, metadata, version);
+ if(wrappedUnMarshaller != null)
+ {
+ if (wrappedUnMarshaller instanceof VersionedUnMarshaller)
+ return ((VersionedUnMarshaller)wrappedUnMarshaller).read(ois, metadata, version);
+ else
+ return wrappedUnMarshaller.read(ois, metadata);
+ }
else
- return wrappedUnMarshaller.read(ois, metadata);
+ {
+ return super.read(ois, metadata, version);
+ }
}
- else
+ finally
{
- return super.read(ois, metadata, version);
+ gzis.end();
}
}
@@ -122,5 +133,25 @@
return new CompressingUnMarshaller(wrappedUnMarshaller);
}
+
+ /**
+ * @author Doychin Bondzhev
+ */
+ static class SelfCleaningGZipInputStream extends GZIPInputStream
+ {
+ public SelfCleaningGZipInputStream(InputStream in) throws IOException
+ {
+ super(in);
+ }
+
+ public void end() throws IOException
+ {
+ while(available() > 0) { // This will force input stream to read gzip trailer from input stream
+ read();
+ }
+ inf.end(); // TO release resources used by native code
+ }
+ }
+
}
More information about the jboss-remoting-commits
mailing list