Author: bodewig
Date: Wed Jan 8 12:56:37 2014
New Revision: 1556519
URL: http://svn.apache.org/r1556519
Log:
Archive(In|Out)put isn't really a Channel itself
Modified:
commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/archivers/ArchiveInput.java
commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/archivers/ArchiveOutput.java
commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/formats/ar/ArArchiveInput.java
commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/formats/ar/ArArchiveOutput.java
commons/proper/compress/branches/compress-2.0/src/test/java/org/apache/commons/compress2/formats/ar/RoundTripTest.java
Modified:
commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/archivers/ArchiveInput.java
URL:
http://svn.apache.org/viewvc/commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/archivers/ArchiveInput.java?rev=1556519&r1=1556518&r2=1556519&view=diff
==============================================================================
---
commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/archivers/ArchiveInput.java
(original)
+++
commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/archivers/ArchiveInput.java
Wed Jan 8 12:56:37 2014
@@ -18,6 +18,7 @@
*/
package org.apache.commons.compress2.archivers;
+import java.io.Closeable;
import java.io.IOException;
import java.nio.channels.ReadableByteChannel;
@@ -25,7 +26,7 @@ import java.nio.channels.ReadableByteCha
* A channel that reads {@link ArchiveEntry}s.
* @NotThreadSafe
*/
-public interface ArchiveInput<A extends ArchiveEntry> extends
ReadableByteChannel {
+public interface ArchiveInput<A extends ArchiveEntry> extends Closeable {
/**
* Obtains the next entry.
@@ -34,6 +35,13 @@ public interface ArchiveInput<A extends
A next() throws IOException;
/**
+ * Obtains a channel the contents of the current entry can be read from.
+ * @return a channel to read the entry's contents from
+ */
+ // TODO use some sort of Tuple or Map.Entry<A, ReadableByteChannel> and
combine with next() ?
+ ReadableByteChannel getChannel();
+
+ /**
* Whether this channel is able to read the contents of the given entry.
*
* <p>Some archive formats support variants or details that are not
supported (yet).</p>
Modified:
commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/archivers/ArchiveOutput.java
URL:
http://svn.apache.org/viewvc/commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/archivers/ArchiveOutput.java?rev=1556519&r1=1556518&r2=1556519&view=diff
==============================================================================
---
commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/archivers/ArchiveOutput.java
(original)
+++
commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/archivers/ArchiveOutput.java
Wed Jan 8 12:56:37 2014
@@ -18,6 +18,7 @@
*/
package org.apache.commons.compress2.archivers;
+import java.io.Closeable;
import java.io.IOException;
import java.nio.channels.WritableByteChannel;
@@ -25,7 +26,7 @@ import java.nio.channels.WritableByteCha
* A channel that writes {@link ArchiveEntry}s.
* @NotThreadSafe
*/
-public interface ArchiveOutput<A extends ArchiveEntry> extends
WritableByteChannel {
+public interface ArchiveOutput<A extends ArchiveEntry> extends Closeable {
/**
* Creates an ArchiveEntry for the given parameters.
@@ -52,9 +53,10 @@ public interface ArchiveOutput<A extends
* process.</p>
*
* @param entry describes the entry
+ * @return a channel to write the entry's contents to
* @throws IOException
*/
- void putEntry(A entry) throws IOException;
+ WritableByteChannel putEntry(A entry) throws IOException;
/**
* Closes the archive entry, writing any trailer information that may be
required.
Modified:
commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/formats/ar/ArArchiveInput.java
URL:
http://svn.apache.org/viewvc/commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/formats/ar/ArArchiveInput.java?rev=1556519&r1=1556518&r2=1556519&view=diff
==============================================================================
---
commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/formats/ar/ArArchiveInput.java
(original)
+++
commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/formats/ar/ArArchiveInput.java
Wed Jan 8 12:56:37 2014
@@ -226,18 +226,8 @@ public class ArArchiveInput extends Abst
}
@Override
- public boolean isOpen() {
- return !closed;
- }
-
- @Override
- public int read(ByteBuffer b) throws IOException {
- byte[] tmp = new byte[b.remaining()];
- int read = wrappedStream.read(tmp);
- if (read > 0) {
- b.put(tmp, 0, read);
- }
- return read;
+ public ReadableByteChannel getChannel() {
+ return Channels.newChannel(wrappedStream);
}
private class WrappedStream extends FilterInputStream {
Modified:
commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/formats/ar/ArArchiveOutput.java
URL:
http://svn.apache.org/viewvc/commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/formats/ar/ArArchiveOutput.java?rev=1556519&r1=1556518&r2=1556519&view=diff
==============================================================================
---
commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/formats/ar/ArArchiveOutput.java
(original)
+++
commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/formats/ar/ArArchiveOutput.java
Wed Jan 8 12:56:37 2014
@@ -87,7 +87,7 @@ public class ArArchiveOutput extends Abs
}
@Override
- public void putEntry(final ArArchiveEntry entry) throws IOException {
+ public WritableByteChannel putEntry(final ArArchiveEntry entry) throws
IOException {
if (finished) {
throw new IOException("Stream has already been finished");
}
@@ -110,6 +110,7 @@ public class ArArchiveOutput extends Abs
entryOffset = 0;
haveUnclosedEntry = true;
+ return new CurrentChannel();
}
private long fill( final long pOffset, final long pNewOffset, byte pFill )
throws IOException {
@@ -124,14 +125,14 @@ public class ArArchiveOutput extends Abs
b.put(pFill);
}
b.flip();
- write(b);
+ new CurrentChannel().write(b);
}
return pNewOffset;
}
private long write( final String data ) throws IOException {
- return write(StandardCharsets.US_ASCII.encode(data));
+ return new
CurrentChannel().write(StandardCharsets.US_ASCII.encode(data));
}
private long writeEntryHeader( final ArArchiveEntry pEntry ) throws
IOException {
@@ -200,14 +201,6 @@ public class ArArchiveOutput extends Abs
return offset;
}
- @Override
- public int write(ByteBuffer b) throws IOException {
- int len = out.write(b);
- count(len);
- entryOffset += len;
- return len;
- }
-
/**
* Calls finish if necessary, and then closes the nested Channel
*/
@@ -235,11 +228,6 @@ public class ArArchiveOutput extends Abs
finished = true;
}
- @Override
- public boolean isOpen() {
- return out.isOpen();
- }
-
private int getUserId(OwnerInformation info) {
return info == null ? 0 : info.getUserId();
}
@@ -247,4 +235,24 @@ public class ArArchiveOutput extends Abs
private int getGroupId(OwnerInformation info) {
return info == null ? 0 : info.getGroupId();
}
+
+ private class CurrentChannel implements WritableByteChannel {
+ @Override
+ public int write(ByteBuffer b) throws IOException {
+ int len = out.write(b);
+ count(len);
+ entryOffset += len;
+ return len;
+ }
+
+ @Override
+ public boolean isOpen() {
+ return out.isOpen();
+ }
+
+ @Override
+ public void close() {
+ // NO-OP
+ }
+ }
}
Modified:
commons/proper/compress/branches/compress-2.0/src/test/java/org/apache/commons/compress2/formats/ar/RoundTripTest.java
URL:
http://svn.apache.org/viewvc/commons/proper/compress/branches/compress-2.0/src/test/java/org/apache/commons/compress2/formats/ar/RoundTripTest.java?rev=1556519&r1=1556518&r2=1556519&view=diff
==============================================================================
---
commons/proper/compress/branches/compress-2.0/src/test/java/org/apache/commons/compress2/formats/ar/RoundTripTest.java
(original)
+++
commons/proper/compress/branches/compress-2.0/src/test/java/org/apache/commons/compress2/formats/ar/RoundTripTest.java
Wed Jan 8 12:56:37 2014
@@ -58,12 +58,12 @@ public class RoundTripTest {
final WritableByteChannel out = new
FileOutputStream(output).getChannel();
final ArArchiveOutput os = new ArArchiveOutput(out);
-
os.putEntry(os.createEntry(ArchiveEntryParameters.fromFile(file1)));
- IOUtils.copy(new FileInputStream(file1).getChannel(), os);
+ IOUtils.copy(new FileInputStream(file1).getChannel(),
+
os.putEntry(os.createEntry(ArchiveEntryParameters.fromFile(file1))));
os.closeEntry();
-
os.putEntry(os.createEntry(ArchiveEntryParameters.fromFile(file2)));
- IOUtils.copy(new FileInputStream(file2).getChannel(), os);
+ IOUtils.copy(new FileInputStream(file2).getChannel(),
+
os.putEntry(os.createEntry(ArchiveEntryParameters.fromFile(file2))));
os.closeEntry();
os.close();
out.close();
@@ -78,7 +78,7 @@ public class RoundTripTest {
File target = new File(dir, entry.getName());
final WritableByteChannel out = new
FileOutputStream(target).getChannel();
- IOUtils.copy(in, out);
+ IOUtils.copy(in.getChannel(), out);
out.close();
in.close();