You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ni...@apache.org on 2010/12/19 09:05:44 UTC

svn commit: r1050772 - in /poi/trunk/src/java/org/apache/poi: poifs/filesystem/POIFSFileSystem.java poifs/nio/ByteArrayBackedDataSource.java poifs/storage/HeaderBlock.java util/CloseIgnoringInputStream.java util/IOUtils.java

Author: nick
Date: Sun Dec 19 08:05:44 2010
New Revision: 1050772

URL: http://svn.apache.org/viewvc?rev=1050772&view=rev
Log:
Move CloseIgnoringInputStream out to its own class, and add more helper methods

Added:
    poi/trunk/src/java/org/apache/poi/util/CloseIgnoringInputStream.java
Modified:
    poi/trunk/src/java/org/apache/poi/poifs/filesystem/POIFSFileSystem.java
    poi/trunk/src/java/org/apache/poi/poifs/nio/ByteArrayBackedDataSource.java
    poi/trunk/src/java/org/apache/poi/poifs/storage/HeaderBlock.java
    poi/trunk/src/java/org/apache/poi/util/IOUtils.java

Modified: poi/trunk/src/java/org/apache/poi/poifs/filesystem/POIFSFileSystem.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/filesystem/POIFSFileSystem.java?rev=1050772&r1=1050771&r2=1050772&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/filesystem/POIFSFileSystem.java (original)
+++ poi/trunk/src/java/org/apache/poi/poifs/filesystem/POIFSFileSystem.java Sun Dec 19 08:05:44 2010
@@ -48,6 +48,7 @@ import org.apache.poi.poifs.storage.Head
 import org.apache.poi.poifs.storage.RawDataBlockList;
 import org.apache.poi.poifs.storage.SmallBlockTableReader;
 import org.apache.poi.poifs.storage.SmallBlockTableWriter;
+import org.apache.poi.util.CloseIgnoringInputStream;
 import org.apache.poi.util.IOUtils;
 import org.apache.poi.util.LongField;
 import org.apache.poi.util.POILogFactory;
@@ -66,23 +67,6 @@ public class POIFSFileSystem
 	private static final POILogger _logger =
 		POILogFactory.getLogger(POIFSFileSystem.class);
 
-    private static final class CloseIgnoringInputStream extends InputStream {
-
-        private final InputStream _is;
-        public CloseIgnoringInputStream(InputStream is) {
-            _is = is;
-        }
-        public int read() throws IOException {
-            return _is.read();
-        }
-        public int read(byte[] b, int off, int len) throws IOException {
-            return _is.read(b, off, len);
-        }
-        public void close() {
-            // do nothing
-        }
-    }
-
     /**
      * Convenience method for clients that want to avoid the auto-close behaviour of the constructor.
      */

Modified: poi/trunk/src/java/org/apache/poi/poifs/nio/ByteArrayBackedDataSource.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/nio/ByteArrayBackedDataSource.java?rev=1050772&r1=1050771&r2=1050772&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/nio/ByteArrayBackedDataSource.java (original)
+++ poi/trunk/src/java/org/apache/poi/poifs/nio/ByteArrayBackedDataSource.java Sun Dec 19 08:05:44 2010
@@ -26,9 +26,12 @@ public class ByteArrayBackedDataSource e
    private byte[] buffer;
    private long size;
    
-   public ByteArrayBackedDataSource(byte[] data) {
+   public ByteArrayBackedDataSource(byte[] data, int size) {
       this.buffer = data;
-      this.size = data.length;
+      this.size = size;
+   }
+   public ByteArrayBackedDataSource(byte[] data) {
+      this(data, data.length);
    }
                 
    public void read(ByteBuffer dst, long position) {

Modified: poi/trunk/src/java/org/apache/poi/poifs/storage/HeaderBlock.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/storage/HeaderBlock.java?rev=1050772&r1=1050771&r2=1050772&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/storage/HeaderBlock.java (original)
+++ poi/trunk/src/java/org/apache/poi/poifs/storage/HeaderBlock.java Sun Dec 19 08:05:44 2010
@@ -112,7 +112,7 @@ public final class HeaderBlock implement
 	}
 	
 	public HeaderBlock(ByteBuffer buffer) throws IOException {
-	   this(buffer.array());
+	   this(IOUtils.toByteArray(buffer, POIFSConstants.SMALLER_BIG_BLOCK_SIZE));
 	}
 	
 	private HeaderBlock(byte[] data) throws IOException {

Added: poi/trunk/src/java/org/apache/poi/util/CloseIgnoringInputStream.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/util/CloseIgnoringInputStream.java?rev=1050772&view=auto
==============================================================================
--- poi/trunk/src/java/org/apache/poi/util/CloseIgnoringInputStream.java (added)
+++ poi/trunk/src/java/org/apache/poi/util/CloseIgnoringInputStream.java Sun Dec 19 08:05:44 2010
@@ -0,0 +1,41 @@
+/* ====================================================================
+   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.poi.util;
+
+import java.io.FilterInputStream;
+import java.io.InputStream;
+
+import org.apache.poi.poifs.filesystem.POIFSFileSystem;
+
+/**
+ * A wrapper around an {@link InputStream}, which 
+ *  ignores close requests made to it.
+ *
+ * Useful with {@link POIFSFileSystem}, where you want
+ *  to control the close yourself.
+ */
+public class CloseIgnoringInputStream extends FilterInputStream {
+   public CloseIgnoringInputStream(InputStream in) {
+      super(in);
+   }
+
+   public void close() {
+      // Does nothing and ignores you
+      return;
+   }
+}

Modified: poi/trunk/src/java/org/apache/poi/util/IOUtils.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/util/IOUtils.java?rev=1050772&r1=1050771&r2=1050772&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/util/IOUtils.java (original)
+++ poi/trunk/src/java/org/apache/poi/util/IOUtils.java Sun Dec 19 08:05:44 2010
@@ -47,6 +47,22 @@ public final class IOUtils {
 		return baos.toByteArray();
 	}
 
+   /**
+    * Returns an array (that shouldn't be written to!) of the
+    *  ByteBuffer. Will be of the requested length, or possibly
+    *  longer if that's easier.
+    */
+   public static byte[] toByteArray(ByteBuffer buffer, int length) {
+      if(buffer.hasArray() && buffer.arrayOffset() == 0) {
+         // The backing array should work out fine for us
+         return buffer.array();
+      }
+      
+      byte[] data = new byte[length];
+      buffer.get(data);
+      return data;
+   }
+
 	/**
 	 * Helper method, just calls <tt>readFully(in, b, 0, b.length)</tt>
 	 */
@@ -99,7 +115,7 @@ public final class IOUtils {
          }
       }
 	}
-
+	
 	/**
 	 * Copies all the data from the given InputStream to the OutputStream. It
 	 * leaves both streams open, so you will still need to close them once done.



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org