Author: mturk
Date: Thu Aug 18 06:47:08 2011
New Revision: 1159060
URL: http://svn.apache.org/viewvc?rev=1159060&view=rev
Log:
Add bzip2 filter streams
Added:
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/DeflateStream.java
(with props)
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/InflateStream.java
(with props)
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/bzip2/Bzip2DeflateStream.java
(with props)
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/bzip2/Bzip2InflateStream.java
(with props)
Modified:
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Memory.java
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/Reader.java
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/Stream.java
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/Writer.java
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/IpcStream.java
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/SocketStream.java
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/Deflater.java
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/Inflater.java
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/bzip2/Bzip2Deflater.java
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/bzip2/Bzip2Impl.java
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/bzip2/Bzip2Inflater.java
commons/sandbox/runtime/trunk/src/main/native/shared/bzip2.c
commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestBzip2.java
Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Memory.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Memory.java?rev=1159060&r1=1159059&r2=1159060&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Memory.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Memory.java Thu
Aug 18 06:47:08 2011
@@ -188,9 +188,11 @@ public final class Memory
{
if (size < 1L)
throw new InvalidArgumentException();
+ if (!(ptr instanceof HeapPointer))
+ throw new RuntimeException();
long p = realloc0(ptr.POINTER, size);
if (p == 0L)
- throw new OutOfMemoryError("Memory re-allocation failed");
+ throw new OutOfMemoryError();
ptr.POINTER = p;
ptr.PLENGTH = size;
}
Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/Reader.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/Reader.java?rev=1159060&r1=1159059&r2=1159060&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/Reader.java
(original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/Reader.java
Thu Aug 18 06:47:08 2011
@@ -245,44 +245,4 @@ public interface Reader
public int read(ByteBuffer buffer)
throws IOException;
- /**
- * Reads at most {@code count} bytes from the current position in this
- * stream and stores them in the {@code ByteBuffer} {@code buffer}
- * starting at {@code offset}.
- * Blocks until {@code count} bytes have been read, the end of the stream
- * is reached or an exception is thrown.
- * <p>
- * {@code ByteBuffer} must be allocated using {@code allocatedirect()}
- * or obtained from {@link DirectByteBuffer}.
- * </p>
- *
- * @param buffer
- * The {@code ByteBuffer} in which to store the bytes read from
- * this stream.
- * @param offset
- * The initial position in {@code buffer} to store the bytes read
- * from this stream.
- * @param count
- * The maximum number of bytes to store in {@code buffer}.
- *
- * @return The number of bytes actually read or {@code -1} if the end of
- * the stream has been reached.
- *
- * @throws IndexOutOfBoundsException
- * If {@code offset < 0} or {@code count < 0}, or if
- * {@code offset + count} is greater than the size of
- * {@code buffer}.
- * @throws ClosedDescriptorException
- * If this stream is closed.
- * @throws OperationWouldBlockException
- * If the stream is in nonblocking mode and the operation
- * would block.
- * @throws TimeoutException
- * If read operation times out.
- * @throws IOException
- * If some other I/O error occurs.
- */
- public int read(ByteBuffer buffer, int offset, int count)
- throws IndexOutOfBoundsException, IOException;
-
}
Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/Stream.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/Stream.java?rev=1159060&r1=1159059&r2=1159060&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/Stream.java
(original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/Stream.java
Thu Aug 18 06:47:08 2011
@@ -202,15 +202,6 @@ public abstract class Stream
}
@Override
- public final int read(ByteBuffer buffer)
- throws IOException
- {
- if (!canRead())
- throw new OperationNotSupportedException();
- return read(buffer, buffer.position(), buffer.remaining());
- }
-
- @Override
public final int write(byte[] buffer)
throws IOException
{
@@ -241,13 +232,4 @@ public abstract class Stream
return write(pointer.address() + off, count);
}
- @Override
- public final int write(ByteBuffer buffer)
- throws IOException
- {
- if (!canWrite())
- throw new OperationNotSupportedException();
- return write(buffer, buffer.position(), buffer.remaining());
- }
-
}
Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/Writer.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/Writer.java?rev=1159060&r1=1159059&r2=1159060&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/Writer.java
(original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/Writer.java
Thu Aug 18 06:47:08 2011
@@ -215,41 +215,6 @@ public interface Writer extends Syncable
throws IOException;
/**
- * Writes {@code count} bytes from the {@code ByteBuffer} {@code buffer}
- * to this stream, starting at the current stream position and
- * using {@code offset} as the first position within {@code buffer}
- * to get bytes.
- * <p>
- * {@code ByteBuffer} must be allocated using {@code allocatedirect()}
- * or obtained from {@link DirectByteBuffer}.
- * </p>
- *
- * @param buffer
- * The {@code ByteBuffer} to write to this stream.
- * @param offset
- * The index of the first byte in {@code buffer} to write.
- * @param count
- * The number of bytes from {@code buffer} to write.
- * @return The number of bytes actually written.
- *
- * @throws IndexOutOfBoundsException
- * If {@code offset < 0} or {@code count < 0}, or if
- * {@code offset + count} is greater than the size of
- * {@code buffer}.
- * @throws ClosedDescriptorException
- * If this stream is closed.
- * @throws OperationWouldBlockException
- * If the stream is in nonblocking mode and the operation
- * would block.
- * @throws TimeoutException
- * If write operation times out.
- * @throws IOException
- * If some other I/O error occurs.
- */
- public int write(ByteBuffer buffer, int offset, int count)
- throws IndexOutOfBoundsException, IOException;
-
- /**
* Writes {@code count} arrays from the array of byte arrays {@code array}
* to this stream, starting at the current stream pointer and using
* {@code offset} as the first position within {@code array} to get bytes.
Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/IpcStream.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/IpcStream.java?rev=1159060&r1=1159059&r2=1159060&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/IpcStream.java
(original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/IpcStream.java
Thu Aug 18 06:47:08 2011
@@ -223,12 +223,12 @@ class IpcStream extends Stream
}
@Override
- public int read(ByteBuffer buffer, int offset, int count)
+ public int read(ByteBuffer buffer)
throws IndexOutOfBoundsException, IOException
{
if (closed())
throw new ClosedDescriptorException();
- return read3(nd, buffer, offset, count);
+ return read3(nd, buffer, buffer.position(), buffer.remaining());
}
// === Writer methods
@@ -261,12 +261,12 @@ class IpcStream extends Stream
}
@Override
- public int write(ByteBuffer buffer, int offset, int count)
+ public int write(ByteBuffer buffer)
throws IndexOutOfBoundsException, IOException
{
if (closed())
throw new ClosedDescriptorException();
- return write3(nd, buffer, offset, count);
+ return write3(nd, buffer, buffer.position(), buffer.remaining());
}
@Override
Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/SocketStream.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/SocketStream.java?rev=1159060&r1=1159059&r2=1159060&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/SocketStream.java
(original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/SocketStream.java
Thu Aug 18 06:47:08 2011
@@ -223,12 +223,12 @@ class SocketStream extends Stream
}
@Override
- public int read(ByteBuffer buffer, int offset, int count)
+ public int read(ByteBuffer buffer)
throws IndexOutOfBoundsException, IOException
{
if (closed())
throw new ClosedDescriptorException();
- return read3(nd, buffer, offset, count);
+ return read3(nd, buffer, buffer.position(), buffer.remaining());
}
// === Writer methods
@@ -261,12 +261,12 @@ class SocketStream extends Stream
}
@Override
- public int write(ByteBuffer buffer, int offset, int count)
+ public int write(ByteBuffer buffer)
throws IndexOutOfBoundsException, IOException
{
if (closed())
throw new ClosedDescriptorException();
- return write3(nd, buffer, offset, count);
+ return write3(nd, buffer, buffer.position(), buffer.remaining());
}
@Override
Added: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/DeflateStream.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/DeflateStream.java?rev=1159060&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/DeflateStream.java
(added)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/DeflateStream.java
Thu Aug 18 06:47:08 2011
@@ -0,0 +1,98 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.runtime.util;
+
+import java.io.Closeable;
+import java.io.IOException;
+import org.apache.commons.runtime.io.FilterStream;
+import org.apache.commons.runtime.io.Stream;
+import org.apache.commons.runtime.io.OperationNotSupportedException;
+
+/**
+ * General purpose compression stream class.
+ *
+ * @author Mladen Turk
+ * @since Runtime 1.0
+ */
+public abstract class DeflateStream extends FilterStream
+{
+
+ /**
+ * Compressor to be used.
+ */
+ protected Deflater def;
+
+ /**
+ * Creates a new compressor stream.
+ */
+ protected DeflateStream(Stream s, Deflater def)
+ {
+ super(s);
+ this.def = def;
+ }
+
+ /**
+ * Releases all memory associated with this compressor stream.
+ * <p>
+ * Any unused input or output is discarded. While this method is
+ * used by {@code finalize()}, it can be called explicitly in order to
+ * free native resources before the next GC cycle.
+ * After {@code close()} was called other methods will typically throw
+ * an {@code IllegalStateException}.
+ * </p>
+ * @see java.io.Closeable#close()
+ * @throws IOException if an I/O error occurs.
+ */
+ @Override
+ public void close()
+ throws IOException
+ {
+ try {
+ def.close();
+ }
+ finally {
+ // This will call stream.close()
+ super.close();
+ }
+ }
+
+ @Override
+ public boolean canSeek()
+ {
+ return false;
+ }
+
+ @Override
+ public long skip(long count)
+ throws IOException
+ {
+ throw new OperationNotSupportedException();
+ }
+
+ @Override
+ public boolean closed()
+ {
+ return stream.closed();
+ }
+
+ @Override
+ public boolean valid()
+ {
+ return stream.valid();
+ }
+
+}
Propchange: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/DeflateStream.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/Deflater.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/Deflater.java?rev=1159060&r1=1159059&r2=1159060&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/Deflater.java
(original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/Deflater.java
Thu Aug 18 06:47:08 2011
@@ -19,6 +19,7 @@ package org.apache.commons.runtime.util;
import java.io.Closeable;
import java.io.IOException;
import java.nio.ByteBuffer;
+import org.apache.commons.runtime.io.Stream;
import org.apache.commons.runtime.InvalidArgumentException;
import org.apache.commons.runtime.InvalidDataException;
import org.apache.commons.runtime.InvalidRangeException;
@@ -218,6 +219,16 @@ public abstract class Deflater implement
}
/**
+ * Fill the internal buffer from the given stream.
+ * The method reads from the stream {@code s} up to
+ * the internal buffer size.
+ *
+ * @param the strem to use.
+ */
+ public abstract void setInput(Stream s)
+ throws IOException;
+
+ /**
* Returns the total number of bytes of input consumed by
* the {@code Deflater}.
*
@@ -235,22 +246,26 @@ public abstract class Deflater implement
/**
* Compressees the data (previously passed to {@code setInput})
- * into the internal buffer.
+ * using the internal buffer and writes them to the given stream.
* A return value of {@code 0} indicates that {@code needsInput()} should
* be called in order to determine if more input data is required.
* <p>
* This method is used with inflate streams and uses internal buffer
* for holding the temporary compressed data.
* </p>
+ *
+ * @param s the stream to use.
* @return the actual number of bytes of compressed data
+ *
* @throws InvalidDataException if the provided data was invalid
* @throws OutOfMemoryError if the memory allocation failed
* @throws NullPointerException if the inflater does not have internal
* buffer.
*/
- public abstract int deflate()
+ public abstract int deflate(Stream s)
throws InvalidDataException,
- OutOfMemoryError;
+ OutOfMemoryError,
+ IOException;
/**
* Compressees the data (previously passed to {@code setInput})
@@ -377,6 +392,6 @@ public abstract class Deflater implement
throw new InvalidArgumentException();
return deflate(b.address(), len);
}
-
+
}
Added: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/InflateStream.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/InflateStream.java?rev=1159060&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/InflateStream.java
(added)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/InflateStream.java
Thu Aug 18 06:47:08 2011
@@ -0,0 +1,98 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.runtime.util;
+
+import java.io.Closeable;
+import java.io.IOException;
+import org.apache.commons.runtime.io.FilterStream;
+import org.apache.commons.runtime.io.Stream;
+import org.apache.commons.runtime.io.OperationNotSupportedException;
+
+/**
+ * General purpose decompression stream class.
+ *
+ * @author Mladen Turk
+ * @since Runtime 1.0
+ */
+public abstract class InflateStream extends FilterStream
+{
+
+ /**
+ * Decompressor to be used.
+ */
+ protected Inflater inf;
+
+ /**
+ * Creates a new decompressor.
+ */
+ protected InflateStream(Stream s, Inflater inf)
+ {
+ super(s);
+ this.inf = inf;
+ }
+
+ /**
+ * Releases all memory associated with this decompressor stream.
+ * <p>
+ * Any unused input or output is discarded. While this method is
+ * used by {@code finalize()}, it can be called explicitly in order to
+ * free native resources before the next GC cycle.
+ * After {@code close()} was called other methods will typically throw
+ * an {@code IllegalStateException}.
+ * </p>
+ * @see java.io.Closeable#close()
+ * @throws IOException if an I/O error occurs.
+ */
+ @Override
+ public void close()
+ throws IOException
+ {
+ try {
+ inf.close();
+ }
+ finally {
+ // This will call stream.close()
+ super.close();
+ }
+ }
+
+ @Override
+ public boolean canSeek()
+ {
+ return false;
+ }
+
+ @Override
+ public long skip(long count)
+ throws IOException
+ {
+ throw new OperationNotSupportedException();
+ }
+
+ @Override
+ public boolean closed()
+ {
+ return stream.closed();
+ }
+
+ @Override
+ public boolean valid()
+ {
+ return stream.valid();
+ }
+
+}
Propchange: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/InflateStream.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/Inflater.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/Inflater.java?rev=1159060&r1=1159059&r2=1159060&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/Inflater.java
(original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/Inflater.java
Thu Aug 18 06:47:08 2011
@@ -19,6 +19,7 @@ package org.apache.commons.runtime.util;
import java.io.Closeable;
import java.io.IOException;
import java.nio.ByteBuffer;
+import org.apache.commons.runtime.io.Stream;
import org.apache.commons.runtime.InvalidArgumentException;
import org.apache.commons.runtime.InvalidDataException;
import org.apache.commons.runtime.InvalidRangeException;
@@ -193,6 +194,17 @@ public abstract class Inflater implement
}
/**
+ * Fill the internal buffer from the given stream.
+ * The method reads from the stream {@code s} up to
+ * the internal buffer size.
+ *
+ * @param the strem to use.
+ */
+ public abstract void setInput(Stream s)
+ throws IOException;
+
+
+ /**
* Returns total number of bytes of input read by the {@code Inflater}.
*
* @return the total number of bytes read.
@@ -207,8 +219,8 @@ public abstract class Inflater implement
public abstract long getTotalOut();
/**
- * Uncompresses bytes from current input and stores them in
- * the internal buffer.
+ * Uncompresses bytes from current input using the internall buffer
+ * and writes them to the given stream.
* A return value of {@code 0} indicates that {@code needsInput()} should
* be called in order to determine if more input data is required.
* <p>
@@ -216,6 +228,7 @@ public abstract class Inflater implement
* for holding the temporary uncompressed data.
* </p>
*
+ * @param s the stream to use.
* @return the actual number of bytes of uncompressed data
*
* @throws InvalidDataException if the provided data was invalid
@@ -223,9 +236,10 @@ public abstract class Inflater implement
* @throws NullPointerException if the inflater does not have internal
* buffer.
*/
- public abstract int inflate()
+ public abstract int inflate(Stream s)
throws InvalidDataException,
- OutOfMemoryError;
+ OutOfMemoryError,
+ IOException;
/**
* Uncompresses up to {@code len} bytes from current input and stores
@@ -372,6 +386,7 @@ public abstract class Inflater implement
throw new InvalidArgumentException();
return inflate(b.address(), len);
}
-
+
}
+
Added: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/bzip2/Bzip2DeflateStream.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/bzip2/Bzip2DeflateStream.java?rev=1159060&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/bzip2/Bzip2DeflateStream.java
(added)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/bzip2/Bzip2DeflateStream.java
Thu Aug 18 06:47:08 2011
@@ -0,0 +1,170 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.runtime.util.bzip2;
+
+import java.io.Closeable;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import org.apache.commons.runtime.InvalidArgumentException;
+import org.apache.commons.runtime.InvalidDataException;
+import org.apache.commons.runtime.InvalidRangeException;
+import org.apache.commons.runtime.OperationNotPermittedException;
+import org.apache.commons.runtime.OverflowException;
+import org.apache.commons.runtime.Pointer;
+import org.apache.commons.runtime.Limits;
+import org.apache.commons.runtime.io.Stream;
+import org.apache.commons.runtime.io.FilterStream;
+import org.apache.commons.runtime.io.OperationNotSupportedException;
+import org.apache.commons.runtime.util.Deflater;
+import org.apache.commons.runtime.util.DeflateStream;
+
+/**
+ * Bzip2 compressor stream.
+ *
+ * @author Mladen Turk
+ * @since Runtime 1.0
+ */
+public final class Bzip2DeflateStream extends DeflateStream
+{
+
+ /**
+ * Creates a new Bzip2 compressor stream.
+ */
+ public Bzip2DeflateStream(Stream s)
+ {
+ this(s, new Bzip2Deflater(9, Bzip2Impl.DEFAULT_WORK_FACTOR, Limits.PAGESIZE));
+ }
+
+ /**
+ * Creates a new Bzip2 decompressor stream with the specified
+ * decompressor.
+ */
+ public Bzip2DeflateStream(Stream s, Deflater def)
+ {
+ super(s, def);
+ }
+
+ @Override
+ public boolean canRead()
+ {
+ return true;
+ }
+
+ @Override
+ public boolean canWrite()
+ {
+ return true;
+ }
+
+ @Override
+ public boolean eof()
+ throws IOException
+ {
+ return def.finished();
+ }
+
+ @Override
+ public int read()
+ throws IOException
+ {
+ throw new OperationNotSupportedException();
+ }
+
+ @Override
+ public int read(byte[] buffer, int offset, int count)
+ throws IndexOutOfBoundsException, IOException
+ {
+ def.setInput(stream);
+ return def.deflate(buffer, offset, count);
+ }
+
+ @Override
+ public int read(long address, int count)
+ throws NullPointerException, IndexOutOfBoundsException, IOException
+ {
+ def.setInput(stream);
+ return def.deflate(address, count);
+ }
+
+ @Override
+ public int read(ByteBuffer buffer)
+ throws IndexOutOfBoundsException, IOException
+ {
+ def.setInput(stream);
+ return def.deflate(buffer);
+ }
+
+ // === Writer methods
+
+ @Override
+ public int write(int b)
+ throws IOException
+ {
+ throw new OperationNotSupportedException();
+ }
+
+ @Override
+ public int write(byte[] buffer, int offset, int count)
+ throws IndexOutOfBoundsException, IOException
+ {
+ def.setInput(buffer, offset, count);
+ return def.deflate(stream);
+ }
+
+ @Override
+ public int write(long address, int count)
+ throws IndexOutOfBoundsException, IOException
+ {
+ def.setInput(address, count);
+ return def.deflate(stream);
+ }
+
+ @Override
+ public int write(ByteBuffer buffer)
+ throws IndexOutOfBoundsException, IOException
+ {
+ def.setInput(buffer);
+ return def.deflate(stream);
+ }
+
+ @Override
+ public long write(byte[][] array, int offset, int count)
+ throws IndexOutOfBoundsException, IOException
+ {
+ // Simulate vector write for now
+ long w = 0;
+ for (int i = 0; i < count; i++) {
+ def.setInput(array[offset + i]);
+ w += def.deflate(stream);
+ }
+ return w;
+ }
+
+ @Override
+ public long write(ByteBuffer[] array, int offset, int count)
+ throws IndexOutOfBoundsException, IOException
+ {
+ // Simulate vector write for now
+ long w = 0;
+ for (int i = 0; i < count; i++) {
+ def.setInput(array[offset + i]);
+ w += def.deflate(stream);
+ }
+ return w;
+ }
+
+}
Propchange: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/bzip2/Bzip2DeflateStream.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/bzip2/Bzip2Deflater.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/bzip2/Bzip2Deflater.java?rev=1159060&r1=1159059&r2=1159060&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/bzip2/Bzip2Deflater.java
(original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/bzip2/Bzip2Deflater.java
Thu Aug 18 06:47:08 2011
@@ -25,6 +25,7 @@ import org.apache.commons.runtime.Invali
import org.apache.commons.runtime.OperationNotPermittedException;
import org.apache.commons.runtime.OverflowException;
import org.apache.commons.runtime.Pointer;
+import org.apache.commons.runtime.io.Stream;
import org.apache.commons.runtime.util.Deflater;
/**
@@ -37,6 +38,7 @@ public class Bzip2Deflater extends Defla
{
private long handle;
+ private long buffer;
private int bufferSize;
private static native int deflate0(long stream)
@@ -103,6 +105,8 @@ public class Bzip2Deflater extends Defla
throw new OutOfMemoryError();
}
this.bufferSize = bufferSize;
+ if (bufferSize > 0)
+ buffer = handle + Bzip2Impl.SIZEOF_BZ_STREAM;
}
@Override
@@ -168,6 +172,21 @@ public class Bzip2Deflater extends Defla
}
@Override
+ public synchronized void setInput(Stream s)
+ throws IOException
+ {
+ if (handle == 0L)
+ throw new IllegalStateException();
+ if (buffer == 0L)
+ throw new NullPointerException();
+ if (Bzip2Impl.needsInput(handle)) {
+ int len = s.read(buffer, bufferSize);
+ if (len > 0)
+ Bzip2Impl.setInput3(handle, len);
+ }
+ }
+
+ @Override
public synchronized long getTotalIn()
{
if (handle == 0L)
@@ -204,15 +223,19 @@ public class Bzip2Deflater extends Defla
}
@Override
- public int deflate()
+ public int deflate(Stream s)
throws InvalidDataException,
- OutOfMemoryError
+ OutOfMemoryError,
+ IOException
{
- if (bufferSize == 0)
+ if (buffer == 0L)
throw new NullPointerException();
if (handle == 0L)
throw new IllegalStateException();
- return deflate0(handle);
+ int n = deflate0(handle);
+ if (n > 0)
+ n = s.write(buffer, n);
+ return n;
}
@Override
Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/bzip2/Bzip2Impl.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/bzip2/Bzip2Impl.java?rev=1159060&r1=1159059&r2=1159060&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/bzip2/Bzip2Impl.java
(original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/bzip2/Bzip2Impl.java
Thu Aug 18 06:47:08 2011
@@ -58,7 +58,7 @@ final class Bzip2Impl
public static native int setInput0(long handle, byte[] buf, int off, int len);
public static native int setInput1(long handle, ByteBuffer buf, int off, int len);
public static native int setInput2(long handle, long buf, int len);
- public static native void setInput3(long handle);
+ public static native void setInput3(long handle, int len);
public static native int getAvailIn(long handle);
public static native long getAvailOut(long handle);
Added: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/bzip2/Bzip2InflateStream.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/bzip2/Bzip2InflateStream.java?rev=1159060&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/bzip2/Bzip2InflateStream.java
(added)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/bzip2/Bzip2InflateStream.java
Thu Aug 18 06:47:08 2011
@@ -0,0 +1,170 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.runtime.util.bzip2;
+
+import java.io.Closeable;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import org.apache.commons.runtime.InvalidArgumentException;
+import org.apache.commons.runtime.InvalidDataException;
+import org.apache.commons.runtime.InvalidRangeException;
+import org.apache.commons.runtime.OperationNotPermittedException;
+import org.apache.commons.runtime.OverflowException;
+import org.apache.commons.runtime.Pointer;
+import org.apache.commons.runtime.Limits;
+import org.apache.commons.runtime.io.Stream;
+import org.apache.commons.runtime.io.FilterStream;
+import org.apache.commons.runtime.io.OperationNotSupportedException;
+import org.apache.commons.runtime.util.Inflater;
+import org.apache.commons.runtime.util.InflateStream;
+
+/**
+ * Bzip2 decompressor stream.
+ *
+ * @author Mladen Turk
+ * @since Runtime 1.0
+ */
+public final class Bzip2InflateStream extends InflateStream
+{
+
+ /**
+ * Creates a new Bzip2 decompressor stream.
+ */
+ public Bzip2InflateStream(Stream s)
+ {
+ this(s, new Bzip2Inflater(false, Limits.PAGESIZE));
+ }
+
+ /**
+ * Creates a new Bzip2 decompressor stream with the specified
+ * decompressor.
+ */
+ public Bzip2InflateStream(Stream s, Inflater inf)
+ {
+ super(s, inf);
+ }
+
+ @Override
+ public boolean canRead()
+ {
+ return true;
+ }
+
+ @Override
+ public boolean canWrite()
+ {
+ return true;
+ }
+
+ @Override
+ public boolean eof()
+ throws IOException
+ {
+ return inf.finished();
+ }
+
+ @Override
+ public int read()
+ throws IOException
+ {
+ throw new OperationNotSupportedException();
+ }
+
+ @Override
+ public int read(byte[] buffer, int offset, int count)
+ throws IndexOutOfBoundsException, IOException
+ {
+ inf.setInput(stream);
+ return inf.inflate(buffer, offset, count);
+ }
+
+ @Override
+ public int read(long address, int count)
+ throws NullPointerException, IndexOutOfBoundsException, IOException
+ {
+ inf.setInput(stream);
+ return inf.inflate(address, count);
+ }
+
+ @Override
+ public int read(ByteBuffer buffer)
+ throws IndexOutOfBoundsException, IOException
+ {
+ inf.setInput(stream);
+ return inf.inflate(buffer);
+ }
+
+ // === Writer methods
+
+ @Override
+ public int write(int b)
+ throws IOException
+ {
+ throw new OperationNotSupportedException();
+ }
+
+ @Override
+ public int write(byte[] buffer, int offset, int count)
+ throws IndexOutOfBoundsException, IOException
+ {
+ inf.setInput(buffer, offset, count);
+ return inf.inflate(stream);
+ }
+
+ @Override
+ public int write(long address, int count)
+ throws IndexOutOfBoundsException, IOException
+ {
+ inf.setInput(address, count);
+ return inf.inflate(stream);
+ }
+
+ @Override
+ public int write(ByteBuffer buffer)
+ throws IndexOutOfBoundsException, IOException
+ {
+ inf.setInput(buffer);
+ return inf.inflate(stream);
+ }
+
+ @Override
+ public long write(byte[][] array, int offset, int count)
+ throws IndexOutOfBoundsException, IOException
+ {
+ // Simulate vector write for now
+ long w = 0;
+ for (int i = 0; i < count; i++) {
+ inf.setInput(array[offset + i]);
+ w += inf.inflate(stream);
+ }
+ return w;
+ }
+
+ @Override
+ public long write(ByteBuffer[] array, int offset, int count)
+ throws IndexOutOfBoundsException, IOException
+ {
+ // Simulate vector write for now
+ long w = 0;
+ for (int i = 0; i < count; i++) {
+ inf.setInput(array[offset + i]);
+ w += inf.inflate(stream);
+ }
+ return w;
+ }
+
+}
Propchange: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/bzip2/Bzip2InflateStream.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/bzip2/Bzip2Inflater.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/bzip2/Bzip2Inflater.java?rev=1159060&r1=1159059&r2=1159060&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/bzip2/Bzip2Inflater.java
(original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/bzip2/Bzip2Inflater.java
Thu Aug 18 06:47:08 2011
@@ -25,6 +25,7 @@ import org.apache.commons.runtime.Invali
import org.apache.commons.runtime.OperationNotPermittedException;
import org.apache.commons.runtime.OverflowException;
import org.apache.commons.runtime.Pointer;
+import org.apache.commons.runtime.io.Stream;
import org.apache.commons.runtime.util.Inflater;
/**
@@ -37,6 +38,7 @@ public final class Bzip2Inflater extends
{
private long handle;
+ private long buffer;
private int bufferSize;
private static native int inflate0(long stream)
@@ -93,6 +95,8 @@ public final class Bzip2Inflater extends
throw new OutOfMemoryError();
}
this.bufferSize = bufferSize;
+ if (bufferSize > 0)
+ buffer = handle + Bzip2Impl.SIZEOF_BZ_STREAM;
}
@Override
@@ -160,6 +164,21 @@ public final class Bzip2Inflater extends
}
@Override
+ public void setInput(Stream s)
+ throws IOException
+ {
+ if (handle == 0L)
+ throw new IllegalStateException();
+ if (buffer == 0L)
+ throw new NullPointerException();
+ if (Bzip2Impl.needsInput(handle)) {
+ int len = s.read(buffer, bufferSize);
+ if (len > 0)
+ Bzip2Impl.setInput3(handle, len);
+ }
+ }
+
+ @Override
public synchronized long getTotalIn()
{
if (handle == 0L)
@@ -176,15 +195,22 @@ public final class Bzip2Inflater extends
}
@Override
- public int inflate()
+ public int inflate(Stream s)
throws InvalidDataException,
- OutOfMemoryError
+ OutOfMemoryError,
+ IOException
{
- if (bufferSize == 0)
+ if (buffer == 0L)
throw new NullPointerException();
if (handle == 0L)
throw new IllegalStateException();
- return inflate0(handle);
+ int n = 0;
+ int i;
+ do {
+ if ((i = inflate0(handle)) > 0)
+ n += s.write(buffer, i);
+ } while (i == bufferSize);
+ return n;
}
@Override
Modified: commons/sandbox/runtime/trunk/src/main/native/shared/bzip2.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/bzip2.c?rev=1159060&r1=1159059&r2=1159060&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/bzip2.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/bzip2.c Thu Aug 18 06:47:08 2011
@@ -338,14 +338,18 @@ ACR_BZIP2_EXPORT(jint, Bzip2Impl, setInp
return rc;
}
-ACR_BZIP2_EXPORT(void, Bzip2Impl, setInput3)(JNI_STDARGS, jlong stream)
+ACR_BZIP2_EXPORT(void, Bzip2Impl, setInput3)(JNI_STDARGS, jlong stream,
+ jint len)
{
acr_bzstream *s = J2P(stream, acr_bzstream *);
ACR_MFREE(s->next_array);
/* Use internal buffer */
s->bz.next_in = ACR_BZBUFF(s);
- s->bz.avail_in = s->blen;
+ if (len < 0)
+ s->bz.avail_in = s->blen;
+ else
+ s->bz.avail_in = len;
}
ACR_BZIP2_EXPORT(jlong, Bzip2Impl, getTotalIn)(JNI_STDARGS, jlong stream)
Modified: commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestBzip2.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestBzip2.java?rev=1159060&r1=1159059&r2=1159060&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestBzip2.java
(original)
+++ commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestBzip2.java
Thu Aug 18 06:47:08 2011
@@ -76,4 +76,28 @@ public class TestBzip2 extends Assert
bz.close();
}
+ @Test(groups = { "core" })
+ public void bzInflater()
+ throws Exception
+ {
+ byte[] cd = loremIpsum.getBytes();
+ byte[] dd = new byte[500];
+ byte[] dc = new byte[50];
+
+ int sc = Bzip2.buffToBuffCompress(cd, 0, dd, 0, cd.length, 9, 30);
+
+ Bzip2Inflater bz = new Bzip2Inflater();
+ bz.setInput(dd);
+
+ int i = 0;
+ int n;
+ do {
+ if ((n = bz.inflate(dc)) > 0)
+ i += n;
+ } while (n == dc.length);
+ assertTrue(bz.finished());
+ assertEquals(i, loremIpsum.length());
+ bz.close();
+ }
+
}
|