Updated Branches:
  refs/heads/camel-2.12.x 954c068b9 -> 66cbc0d36
  refs/heads/master 96a991760 -> 15e1077d2


CAMEL-7056: Use streaming support in base64. Thanks to Stephan Siano for the 
patch.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/dc081927
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/dc081927
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/dc081927

Branch: refs/heads/master
Commit: dc081927c8c2b56ad00dba67e639a675ab44c446
Parents: 96a9917
Author: Claus Ibsen <davscl...@apache.org>
Authored: Sat Dec 14 10:21:08 2013 +0100
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Sat Dec 14 10:21:08 2013 +0100

----------------------------------------------------------------------
 .../dataformat/base64/Base64DataFormat.java     | 39 ++++++++++++--------
 1 file changed, 24 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/dc081927/components/camel-base64/src/main/java/org/apache/camel/dataformat/base64/Base64DataFormat.java
----------------------------------------------------------------------
diff --git 
a/components/camel-base64/src/main/java/org/apache/camel/dataformat/base64/Base64DataFormat.java
 
b/components/camel-base64/src/main/java/org/apache/camel/dataformat/base64/Base64DataFormat.java
index 70282b3..fc30303 100644
--- 
a/components/camel-base64/src/main/java/org/apache/camel/dataformat/base64/Base64DataFormat.java
+++ 
b/components/camel-base64/src/main/java/org/apache/camel/dataformat/base64/Base64DataFormat.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.dataformat.base64;
 
-import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
 import java.io.OutputStream;
 
@@ -25,6 +24,8 @@ import org.apache.camel.spi.DataFormat;
 import org.apache.camel.util.ExchangeHelper;
 import org.apache.camel.util.IOHelper;
 import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.codec.binary.Base64InputStream;
+import org.apache.commons.codec.binary.Base64OutputStream;
 
 public class Base64DataFormat implements DataFormat {
 
@@ -34,29 +35,37 @@ public class Base64DataFormat implements DataFormat {
 
     @Override
     public void marshal(Exchange exchange, Object graph, OutputStream stream) 
throws Exception {
+        if (urlSafe) {
+            marshalUrlSafe(exchange, graph, stream);
+        } else {
+            marshalStreaming(exchange, graph, stream);
+        }
+    }
+
+    private void marshalStreaming(Exchange exchange, Object graph, 
OutputStream stream) throws Exception {
+        InputStream decoded = ExchangeHelper.convertToMandatoryType(exchange, 
InputStream.class, graph);
+
+        Base64OutputStream base64Output = new Base64OutputStream(stream, true, 
lineLength, lineSeparator);
+        try {
+            IOHelper.copy(decoded, base64Output);
+        } finally {
+            IOHelper.close(decoded, base64Output);
+        }
+    }
+
+    private void marshalUrlSafe(Exchange exchange, Object graph, OutputStream 
stream) throws Exception {
         byte[] decoded = ExchangeHelper.convertToMandatoryType(exchange, 
byte[].class, graph);
 
-        Base64 codec = createCodec();
+        Base64 codec = new Base64(lineLength, lineSeparator, true);
         byte[] encoded = codec.encode(decoded);
 
         stream.write(encoded);
+        stream.flush();
     }
 
     @Override
     public Object unmarshal(Exchange exchange, InputStream input) throws 
Exception {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        IOHelper.copyAndCloseInput(input, baos);
-        byte[] encoded = baos.toByteArray();
-        baos.close();
-
-        Base64 codec = createCodec();
-        byte[] decoded = codec.decode(encoded);
-
-        return decoded;
-    }
-
-    private Base64 createCodec() {
-        return new Base64(lineLength, lineSeparator, urlSafe);
+        return new Base64InputStream(input, false, lineLength, lineSeparator);
     }
 
     public int getLineLength() {

Reply via email to