Author: norman
Date: Thu Nov 18 18:50:47 2010
New Revision: 1036571

URL: http://svn.apache.org/viewvc?rev=1036571&view=rev
Log:
Use Channels to transfer data if possible and be a bit smarter with 
LazySkippingInputStream. See IMAP-231

Modified:
    
james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/InputStreamContent.java
    
james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/LazySkippingInputStream.java

Modified: 
james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/InputStreamContent.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/InputStreamContent.java?rev=1036571&r1=1036570&r2=1036571&view=diff
==============================================================================
--- 
james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/InputStreamContent.java
 (original)
+++ 
james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/InputStreamContent.java
 Thu Nov 18 18:50:47 2010
@@ -65,6 +65,7 @@ public final class InputStreamContent im
      */
     public void writeTo(WritableByteChannel channel) throws IOException {
         InputStream in = null;
+        long skipped = 0;
         try {
             switch (type) {
             case Full:
@@ -74,10 +75,13 @@ public final class InputStreamContent im
                 in = m.getBodyContent();
                 break;
             }
-          
+            if (in instanceof LazySkippingInputStream) {
+                skipped = ((LazySkippingInputStream) in).getSkippedBytes();
+                in = ((LazySkippingInputStream) in).getWrapped(); 
+            }
             if (in instanceof FileInputStream) {
                 FileChannel fileChannel = ((FileInputStream)in).getChannel();
-                fileChannel.transferTo(0, fileChannel.size(), channel);
+                fileChannel.transferTo(skipped, fileChannel.size(), channel);
                 fileChannel.close();
             } else {
                 int i = 0;

Modified: 
james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/LazySkippingInputStream.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/LazySkippingInputStream.java?rev=1036571&r1=1036570&r2=1036571&view=diff
==============================================================================
--- 
james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/LazySkippingInputStream.java
 (original)
+++ 
james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/LazySkippingInputStream.java
 Thu Nov 18 18:50:47 2010
@@ -97,5 +97,13 @@ public class LazySkippingInputStream ext
             skipped = true;
         }
     }
+    
+    public InputStream getWrapped() throws IOException {
+        return in;
+    }
+    
+    public long getSkippedBytes() {
+        return skipBytes;
+    }
 
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to