You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2010/11/18 19:35:46 UTC

svn commit: r1036569 - in /james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming: InputStreamContent.java InputStreamFullContent.java

Author: norman
Date: Thu Nov 18 18:35:45 2010
New Revision: 1036569

URL: http://svn.apache.org/viewvc?rev=1036569&view=rev
Log:
Use Channels to transfer data if possible. See IMAP-231

Removed:
    james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/InputStreamFullContent.java
Modified:
    james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/InputStreamContent.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=1036569&r1=1036568&r2=1036569&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:35:45 2010
@@ -18,9 +18,11 @@
  ****************************************************************/
 package org.apache.james.mailbox.store.streaming;
 
+import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.ByteBuffer;
+import java.nio.channels.FileChannel;
 import java.nio.channels.WritableByteChannel;
 
 import org.apache.james.mailbox.Content;
@@ -72,15 +74,24 @@ public final class InputStreamContent im
                 in = m.getBodyContent();
                 break;
             }
-            // read all the content of the underlying InputStream in 16384 byte chunks, wrap them
-            // in a ByteBuffer and finally write the Buffer to the channel
-            byte[] buf = new byte[16384];
-            int i = 0;
-            while ((i = in.read(buf)) != -1) {
-                ByteBuffer buffer = ByteBuffer.wrap(buf);
-                // set the limit of the buffer to the returned bytes
+          
+            if (in instanceof FileInputStream) {
+                FileChannel fileChannel = ((FileInputStream)in).getChannel();
+                fileChannel.transferTo(0, fileChannel.size(), channel);
+                fileChannel.close();
+            } else {
+                int i = 0;
+
+                // read all the content of the underlying InputStream in 16384 byte chunks, wrap them
+                // in a ByteBuffer and finally write the Buffer to the channel
+                byte[] buf = new byte[16384];
+                while ((i = in.read(buf)) != -1) {
+                    
+                    ByteBuffer buffer = ByteBuffer.wrap(buf);
+                    // set the limit of the buffer to the returned bytes
                     buffer.limit(i);
                     channel.write(buffer);
+                }
             }
         } finally {
             if(in != null) {



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org