You are viewing a plain text version of this content. The canonical link for it is here.
Posted to mime4j-dev@james.apache.org by ol...@apache.org on 2013/05/10 19:26:07 UTC

svn commit: r1481113 [1/2] - in /james/mime4j/trunk/core/src: main/java/org/apache/james/mime4j/codec/ main/java/org/apache/james/mime4j/io/ main/java/org/apache/james/mime4j/util/ test/java/org/apache/james/mime4j/codec/ test/java/org/apache/james/mim...

Author: olegk
Date: Fri May 10 17:26:02 2013
New Revision: 1481113

URL: http://svn.apache.org/r1481113
Log:
Use more efficient implementations for byte array and string backed input stream implementations that attempt to minimize intermediate copying while streaming data

Added:
    james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/io/BinaryInputStream.java   (with props)
    james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/io/InputStreams.java   (with props)
    james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/io/TextInputStream.java   (with props)
Modified:
    james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/codec/DecoderUtil.java
    james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/util/ContentUtil.java
    james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/codec/Base64InputStreamTest.java
    james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/codec/CodecUtilTest.java
    james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/codec/QuotedPrintableEncodeTest.java
    james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/codec/QuotedPrintableInputStreamTest.java
    james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/codec/QuotedPrintableTextEncodeTest.java
    james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/BufferedLineReaderInputStreamBufferTest.java
    james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/BufferedLineReaderInputStreamTest.java
    james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/EOLConvertingInputStreamTest.java
    james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/LimitedInputStreamTest.java
    james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/LineNumberInputStreamTest.java
    james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/LineReaderInputStreamAdaptorTest.java
    james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/MimeBoundaryInputStreamTest.java
    james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/PositionInputStreamTest.java

Modified: james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/codec/DecoderUtil.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/codec/DecoderUtil.java?rev=1481113&r1=1481112&r2=1481113&view=diff
==============================================================================
--- james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/codec/DecoderUtil.java (original)
+++ james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/codec/DecoderUtil.java Fri May 10 17:26:02 2013
@@ -19,14 +19,14 @@
 
 package org.apache.james.mime4j.codec;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.nio.charset.Charset;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import org.apache.james.mime4j.io.InputStreams;
+import org.apache.james.mime4j.util.ByteArrayBuffer;
 import org.apache.james.mime4j.util.CharsetUtil;
 
 /**
@@ -44,24 +44,23 @@ public class DecoderUtil {
      * @return the decoded bytes.
      */
     private static byte[] decodeQuotedPrintable(String s, DecodeMonitor monitor) {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
         try {
-            byte[] bytes = s.getBytes("US-ASCII");
-
             QuotedPrintableInputStream is = new QuotedPrintableInputStream(
-                                               new ByteArrayInputStream(bytes), monitor);
-
-            int b;
-            while ((b = is.read()) != -1) {
-                baos.write(b);
+                    InputStreams.createAscii(s), monitor);
+            try {
+                ByteArrayBuffer buf = new ByteArrayBuffer(s.length());
+                int b;
+                while ((b = is.read()) != -1) {
+                    buf.append(b);
+                }
+                return buf.toByteArray();
+            } finally {
+                is.close();
             }
-        } catch (IOException e) {
+        } catch (IOException ex) {
             // This should never happen!
-            throw new IllegalStateException(e);
+            throw new Error(ex);
         }
-
-        return baos.toByteArray();
     }
 
     /**
@@ -72,24 +71,23 @@ public class DecoderUtil {
      * @return the decoded bytes.
      */
     private static byte[] decodeBase64(String s, DecodeMonitor monitor) {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
         try {
-            byte[] bytes = s.getBytes("US-ASCII");
-
             Base64InputStream is = new Base64InputStream(
-                                        new ByteArrayInputStream(bytes), monitor);
-
-            int b;
-            while ((b = is.read()) != -1) {
-                baos.write(b);
+                    InputStreams.createAscii(s), monitor);
+            try {
+                ByteArrayBuffer buf = new ByteArrayBuffer(s.length());
+                int b;
+                while ((b = is.read()) != -1) {
+                    buf.append(b);
+                }
+                return buf.toByteArray();
+            } finally {
+                is.close();
             }
-        } catch (IOException e) {
+        } catch (IOException ex) {
             // This should never happen!
-            throw new IllegalStateException(e);
+            throw new Error(ex);
         }
-
-        return baos.toByteArray();
     }
 
     /**

Added: james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/io/BinaryInputStream.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/io/BinaryInputStream.java?rev=1481113&view=auto
==============================================================================
--- james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/io/BinaryInputStream.java (added)
+++ james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/io/BinaryInputStream.java Fri May 10 17:26:02 2013
@@ -0,0 +1,92 @@
+/****************************************************************
+ * 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.james.mime4j.io;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.ByteBuffer;
+
+/**
+ * {@link InputStream} backed by byte array.
+ */
+class BinaryInputStream extends InputStream {
+
+    private final ByteBuffer bbuf;
+
+    BinaryInputStream(final ByteBuffer b) {
+        super();
+        this.bbuf = b;
+    }
+
+    @Override
+    public int read(byte[] b, int off, int len) throws IOException {
+        if (b == null) {
+            throw new NullPointerException();
+        }
+        if (off < 0 || len < 0 || off + len > b.length) {
+            throw new IndexOutOfBoundsException();
+        }
+        if (len == 0) {
+            return 0;
+        }
+        if (this.bbuf.hasRemaining()) {
+            int chunk = Math.min(this.bbuf.remaining(), len);
+            this.bbuf.get(b, off, chunk);
+            return chunk;
+        } else {
+            return -1;
+        }
+    }
+
+    @Override
+    public int read() throws IOException {
+        if (this.bbuf.hasRemaining()) {
+            return this.bbuf.get() & 0xFF;
+        } else {
+            return -1;
+        }
+    }
+
+    @Override
+    public int read(byte[] b) throws IOException {
+        return read(b, 0, b.length);
+    }
+
+    @Override
+    public long skip(long n) throws IOException {
+        int skipped = 0;
+        while (n > 0 && this.bbuf.hasRemaining()) {
+            this.bbuf.get();
+            n--;
+            skipped++;
+        }
+        return skipped;
+    }
+
+    @Override
+    public int available() throws IOException {
+        return this.bbuf.remaining();
+    }
+
+    @Override
+    public void close() throws IOException {
+    }
+
+}

Propchange: james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/io/BinaryInputStream.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/io/BinaryInputStream.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/io/BinaryInputStream.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/io/InputStreams.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/io/InputStreams.java?rev=1481113&view=auto
==============================================================================
--- james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/io/InputStreams.java (added)
+++ james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/io/InputStreams.java Fri May 10 17:26:02 2013
@@ -0,0 +1,80 @@
+/****************************************************************
+ * 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.james.mime4j.io;
+
+import java.io.InputStream;
+import java.nio.ByteBuffer;
+import java.nio.charset.Charset;
+
+import org.apache.james.mime4j.util.ByteArrayBuffer;
+import org.apache.james.mime4j.util.CharsetUtil;
+
+/**
+ * Factory methods for {@link InputStream} instances backed by binary or textual data that attempt
+ * to minimize intermediate copying while streaming data.
+ */
+public final class InputStreams {
+
+    private InputStreams() {
+    }
+
+    public static InputStream create(final byte[] b, int off, int len) {
+        if (b == null) {
+            throw new IllegalArgumentException("Byte array may not be null");
+        }
+        return new BinaryInputStream(ByteBuffer.wrap(b, off, len));
+    }
+
+    public static InputStream create(final byte[] b) {
+        if (b == null) {
+            throw new IllegalArgumentException("Byte array may not be null");
+        }
+        return new BinaryInputStream(ByteBuffer.wrap(b));
+    }
+
+    public static InputStream create(final ByteArrayBuffer b) {
+        if (b == null) {
+            throw new IllegalArgumentException("Byte array may not be null");
+        }
+        return new BinaryInputStream(ByteBuffer.wrap(b.buffer(), 0, b.length()));
+    }
+
+    public static InputStream create(final ByteBuffer b) {
+        if (b == null) {
+            throw new IllegalArgumentException("Byte array may not be null");
+        }
+        return new BinaryInputStream(b);
+    }
+
+    public static InputStream createAscii(final String s) {
+        if (s == null) {
+            throw new IllegalArgumentException("String may not be null");
+        }
+        return new TextInputStream(s, CharsetUtil.US_ASCII, 1024);
+    }
+
+    public static InputStream create(final String s, final Charset charset) {
+        if (s == null) {
+            throw new IllegalArgumentException("String may not be null");
+        }
+        return new TextInputStream(s, charset != null ? charset : CharsetUtil.DEFAULT_CHARSET, 1024);
+    }
+
+}

Propchange: james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/io/InputStreams.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/io/InputStreams.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/io/InputStreams.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/io/TextInputStream.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/io/TextInputStream.java?rev=1481113&view=auto
==============================================================================
--- james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/io/TextInputStream.java (added)
+++ james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/io/TextInputStream.java Fri May 10 17:26:02 2013
@@ -0,0 +1,131 @@
+/****************************************************************
+ * 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.james.mime4j.io;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.nio.charset.CharacterCodingException;
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetEncoder;
+import java.nio.charset.CoderResult;
+import java.nio.charset.CodingErrorAction;
+
+/**
+ * {@link InputStream} backed by {@link CharSequence}.
+ */
+class TextInputStream extends InputStream {
+
+    private final CharsetEncoder encoder;
+    private final CharBuffer cbuf;
+    private final ByteBuffer bbuf;
+
+    TextInputStream(final CharSequence s, final Charset charset, int bufferSize) {
+        super();
+        this.encoder = charset.newEncoder()
+            .onMalformedInput(CodingErrorAction.REPLACE)
+            .onUnmappableCharacter(CodingErrorAction.REPLACE);
+        this.bbuf = ByteBuffer.allocate(bufferSize);
+        this.bbuf.flip();
+        this.cbuf = CharBuffer.wrap(s);
+    }
+
+    private void fillBuffer() throws CharacterCodingException {
+        this.bbuf.compact();
+        CoderResult result = this.encoder.encode(this.cbuf, this.bbuf, true);
+        if (result.isError()) {
+            result.throwException();
+        }
+        this.bbuf.flip();
+    }
+
+    @Override
+    public int read(byte[] b, int off, int len) throws IOException {
+        if (b == null) {
+            throw new NullPointerException();
+        }
+        if (off < 0 || len < 0 || off + len > b.length) {
+            throw new IndexOutOfBoundsException();
+        }
+        if (len == 0) {
+            return 0;
+        }
+        if (!this.bbuf.hasRemaining() && !this.cbuf.hasRemaining()) {
+            return -1;
+        }
+        int bytesRead = 0;
+        while (len > 0) {
+            if (this.bbuf.hasRemaining()) {
+                int chunk = Math.min(this.bbuf.remaining(), len);
+                this.bbuf.get(b, off, chunk);
+                off += chunk;
+                len -= chunk;
+                bytesRead += chunk;
+            } else {
+                fillBuffer();
+                if (!this.bbuf.hasRemaining() && !this.cbuf.hasRemaining()) {
+                    break;
+                }
+            }
+        }
+        return bytesRead == 0 && !this.cbuf.hasRemaining() ? -1 : bytesRead;
+    }
+
+    @Override
+    public int read() throws IOException {
+        for (;;) {
+            if (this.bbuf.hasRemaining()) {
+                return this.bbuf.get() & 0xFF;
+            } else {
+                fillBuffer();
+                if (!this.bbuf.hasRemaining() && !this.cbuf.hasRemaining()) {
+                    return -1;
+                }
+            }
+        }
+    }
+
+    @Override
+    public int read(byte[] b) throws IOException {
+        return read(b, 0, b.length);
+    }
+
+    @Override
+    public long skip(long n) throws IOException {
+        int skipped = 0;
+        while (n > 0 && this.cbuf.hasRemaining()) {
+            this.cbuf.get();
+            n--;
+            skipped++;
+        }
+        return skipped;
+    }
+
+    @Override
+    public int available() throws IOException {
+        return this.cbuf.remaining();
+    }
+
+    @Override
+    public void close() throws IOException {
+    }
+
+}

Propchange: james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/io/TextInputStream.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/io/TextInputStream.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/io/TextInputStream.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/util/ContentUtil.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/util/ContentUtil.java?rev=1481113&r1=1481112&r2=1481113&view=diff
==============================================================================
--- james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/util/ContentUtil.java (original)
+++ james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/util/ContentUtil.java Fri May 10 17:26:02 2013
@@ -19,6 +19,7 @@
 
 package org.apache.james.mime4j.util;
 
+import java.io.UnsupportedEncodingException;
 import java.nio.ByteBuffer;
 import java.nio.CharBuffer;
 import java.nio.charset.Charset;
@@ -162,4 +163,52 @@ public class ContentUtil {
                 .toString();
     }
 
+    public static byte[] toAsciiByteArray(final String s) {
+        if (s == null) {
+            return null;
+        }
+        try {
+            return s.getBytes(CharsetUtil.US_ASCII.name());
+        } catch (UnsupportedEncodingException ex) {
+            // Should never happen
+            throw new Error(ex);
+        }
+    }
+
+    public static String toAsciiString(final byte[] b) {
+        if (b == null) {
+            return null;
+        }
+        try {
+            return new String(b, CharsetUtil.US_ASCII.name());
+        } catch (UnsupportedEncodingException ex) {
+            // Should never happen
+            throw new Error(ex);
+        }
+    }
+
+    public static String toAsciiString(final byte[] b, int off, int len) {
+        if (b == null) {
+            return null;
+        }
+        try {
+            return new String(b, off, len, CharsetUtil.US_ASCII.name());
+        } catch (UnsupportedEncodingException ex) {
+            // Should never happen
+            throw new Error(ex);
+        }
+    }
+
+    public static String toAsciiString(final ByteArrayBuffer b) {
+        if (b == null) {
+            return null;
+        }
+        try {
+            return new String(b.buffer(), 0, b.length(), CharsetUtil.US_ASCII.name());
+        } catch (UnsupportedEncodingException ex) {
+            // Should never happen
+            throw new Error(ex);
+        }
+    }
+
 }

Modified: james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/codec/Base64InputStreamTest.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/codec/Base64InputStreamTest.java?rev=1481113&r1=1481112&r2=1481113&view=diff
==============================================================================
--- james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/codec/Base64InputStreamTest.java (original)
+++ james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/codec/Base64InputStreamTest.java Fri May 10 17:26:02 2013
@@ -19,61 +19,69 @@
 
 package org.apache.james.mime4j.codec;
 
-import org.apache.commons.io.output.NullOutputStream;
-import org.junit.Assert;
-import static org.junit.Assert.fail;
-import org.junit.Test;
-
-import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
 import java.util.Random;
 
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.io.output.NullOutputStream;
+import org.apache.james.mime4j.io.InputStreams;
+import org.apache.james.mime4j.util.ContentUtil;
+import org.junit.Assert;
+import org.junit.Test;
+
 public class Base64InputStreamTest {
 
+    private static Base64InputStream create(final String s) {
+        return new Base64InputStream(InputStreams.createAscii(s));
+    }
+
+    private static Base64InputStream createStrict(final String s) {
+        return new Base64InputStream(InputStreams.createAscii(s), true);
+    }
+
+    private static Base64InputStream create(final byte[] b) {
+        return new Base64InputStream(InputStreams.create(b));
+    }
+
+    private static byte[] readBin(final InputStream is) throws IOException {
+        return IOUtils.toByteArray(is);
+    }
+
+    private static String readText(final InputStream is) throws IOException {
+        return ContentUtil.toAsciiString(IOUtils.toByteArray(is));
+    }
+
     @Test
     public void testDecode() throws IOException {
-        ByteArrayInputStream bis;
         Base64InputStream decoder;
-        byte[] bytes;
 
         /*
          * Simple initial test.
          */
-        bis = new ByteArrayInputStream(
-                fromString("VGhpcyBpcyB0aGUgcGxhaW4gdGV4dCBtZXNzYWdlIQ=="));
-        decoder = new Base64InputStream(bis);
-        Assert.assertEquals("This is the plain text message!", toString(read(decoder)));
+        decoder = create("VGhpcyBpcyB0aGUgcGxhaW4gdGV4dCBtZXNzYWdlIQ==");
+        Assert.assertEquals("This is the plain text message!", readText(decoder));
 
         /*
          * Test encoded text padded once, twice and not at all.
          */
-        bis = new ByteArrayInputStream(
-                fromString("VGhpcyBpcyBhIHRleHQgd2hpY2ggaGFzIHRvIGJl"
+        decoder = create(("VGhpcyBpcyBhIHRleHQgd2hpY2ggaGFzIHRvIGJl"
                         + "IHBhZGRlZCBvbmNlLi4="));
-        decoder = new Base64InputStream(bis);
-        Assert.assertEquals("This is a text which has to be padded once..", toString(read(decoder)));
-        bis = new ByteArrayInputStream(
-                fromString("VGhpcyBpcyBhIHRleHQgd2hpY2ggaGFzIHRvIGJl"
+        Assert.assertEquals("This is a text which has to be padded once..", readText(decoder));
+        decoder = create(("VGhpcyBpcyBhIHRleHQgd2hpY2ggaGFzIHRvIGJl"
                         + "IHBhZGRlZCB0d2ljZQ=="));
-        decoder = new Base64InputStream(bis);
-        Assert.assertEquals("This is a text which has to be padded twice", toString(read(decoder)));
-        bis = new ByteArrayInputStream(
-                fromString("VGhpcyBpcyBhIHRleHQgd2hpY2ggd2lsbCBub3Qg"
+        Assert.assertEquals("This is a text which has to be padded twice", readText(decoder));
+        decoder = create(("VGhpcyBpcyBhIHRleHQgd2hpY2ggd2lsbCBub3Qg"
                         + "YmUgcGFkZGVk"));
-        decoder = new Base64InputStream(bis);
-        Assert.assertEquals("This is a text which will not be padded", toString(read(decoder)));
+        Assert.assertEquals("This is a text which will not be padded", readText(decoder));
 
         /*
          * Test that non base64 characters are ignored.
          */
-        bis = new ByteArrayInputStream(
-                fromString(" &% VGhp\r\ncyBp\r\ncyB0aGUgcGxhaW4g "
+        decoder = create((" &% VGhp\r\ncyBp\r\ncyB0aGUgcGxhaW4g "
                         + " \tdGV4dCBtZ?!XNzY*WdlIQ=="));
-        decoder = new Base64InputStream(bis);
-        Assert.assertEquals("This is the plain text message!", toString(read(decoder)));
+        Assert.assertEquals("This is the plain text message!", readText(decoder));
 
         /*
          * Test that the bytes 0-255 shifted 0, 1 and 2 positions are
@@ -103,25 +111,24 @@ public class Base64InputStreamTest {
                 + "BwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5u"
                 + "fo6err7O3u7/Dx8vP09fb3+Pn6+/z9/v8AAQ==";
 
-        bis = new ByteArrayInputStream(fromString(s1));
-        decoder = new Base64InputStream(bis);
-        bytes = read(decoder);
+        byte[] bytes;
+
+        decoder = create(s1);
+        bytes = readBin(decoder);
 
         for (int i = 0; i < bytes.length; i++) {
             Assert.assertEquals("Position " + i, bytes[i], (byte) i);
         }
 
-        bis = new ByteArrayInputStream(fromString(s2));
-        decoder = new Base64InputStream(bis);
-        bytes = read(decoder);
+        decoder = create(s2);
+        bytes = readBin(decoder);
 
         for (int i = 0; i < bytes.length; i++) {
             Assert.assertEquals("Position " + i, bytes[i], (byte) (i + 1));
         }
 
-        bis = new ByteArrayInputStream(fromString(s3));
-        decoder = new Base64InputStream(bis);
-        bytes = read(decoder);
+        decoder = create(s3);
+        bytes = readBin(decoder);
 
         for (int i = 0; i < bytes.length; i++) {
             Assert.assertEquals("Position " + i, bytes[i], (byte) (i + 2));
@@ -130,12 +137,7 @@ public class Base64InputStreamTest {
 
     @Test
     public void testDecodePrematureClose() throws IOException {
-        ByteArrayInputStream bis;
-        Base64InputStream decoder;
-
-        bis = new ByteArrayInputStream(
-                fromString("VGhpcyBpcyB0aGUgcGxhaW4gdGV4dCBtZXNzYWdlIQ=="));
-        decoder = new Base64InputStream(bis);
+        Base64InputStream decoder = create("VGhpcyBpcyB0aGUgcGxhaW4gdGV4dCBtZXNzYWdlIQ==");
         Assert.assertEquals('T', decoder.read());
         Assert.assertEquals('h', decoder.read());
         decoder.close();
@@ -153,12 +155,11 @@ public class Base64InputStreamTest {
         new Random(0).nextBytes(data);
 
         ByteArrayOutputStream eOut = new ByteArrayOutputStream();
-        CodecUtil.encodeBase64(new ByteArrayInputStream(data), eOut);
+        CodecUtil.encodeBase64(InputStreams.create(data), eOut);
         byte[] encoded = eOut.toByteArray();
 
         for (int bufferSize = 1; bufferSize <= 1009; bufferSize++) {
-            ByteArrayInputStream bis = new ByteArrayInputStream(encoded);
-            Base64InputStream decoder = new Base64InputStream(bis);
+            Base64InputStream decoder = create(encoded);
             ByteArrayOutputStream dOut = new ByteArrayOutputStream();
 
             final byte[] buffer = new byte[bufferSize];
@@ -182,9 +183,7 @@ public class Base64InputStreamTest {
      */
     @Test
     public void testReadInt() throws Exception {
-        ByteArrayInputStream bis = new ByteArrayInputStream(
-                fromString("VGhpcyBpcyB0aGUgcGxhaW4gdGV4dCBtZXNzYWdlIQ=="));
-        Base64InputStream decoder = new Base64InputStream(bis);
+        Base64InputStream decoder = create("VGhpcyBpcyB0aGUgcGxhaW4gdGV4dCBtZXNzYWdlIQ==");
         ByteArrayOutputStream out = new ByteArrayOutputStream();
 
         while (true) {
@@ -195,8 +194,8 @@ public class Base64InputStreamTest {
         }
         decoder.close();
 
-        Assert.assertEquals("This is the plain text message!", toString(out
-                .toByteArray()));
+        Assert.assertEquals("This is the plain text message!",
+                ContentUtil.toAsciiString(out.toByteArray()));
     }
 
     /**
@@ -204,10 +203,7 @@ public class Base64InputStreamTest {
      */
     @Test
     public void testReadOffset() throws Exception {
-        ByteArrayInputStream bis = new ByteArrayInputStream(
-                fromString("VGhpcyBpcyB0aGUgcGxhaW4gdGV4dCBtZXNzYWdlIQ=="));
-        Base64InputStream decoder = new Base64InputStream(bis);
-
+        Base64InputStream decoder = create("VGhpcyBpcyB0aGUgcGxhaW4gdGV4dCBtZXNzYWdlIQ==");
         byte[] data = new byte[36];
         for (int i = 0; ; ) {
             int bytes = decoder.read(data, i, 5);
@@ -218,14 +214,12 @@ public class Base64InputStreamTest {
         decoder.close();
 
         Assert.assertEquals("This is the plain text message!\0\0\0\0\0",
-                toString(data));
+                ContentUtil.toAsciiString(data));
     }
 
     @Test
     public void testStrictUnexpectedEof() throws Exception {
-        ByteArrayInputStream bis = new ByteArrayInputStream(
-                fromString("VGhpcyBpcyB0aGUgcGxhaW4gdGV4dCBtZXNzYWdlI"));
-        Base64InputStream decoder = new Base64InputStream(bis, true);
+        Base64InputStream decoder = createStrict("VGhpcyBpcyB0aGUgcGxhaW4gdGV4dCBtZXNzYWdlI");
         try {
             CodecUtil.copy(decoder, new NullOutputStream());
             Assert.fail();
@@ -237,20 +231,16 @@ public class Base64InputStreamTest {
 
     @Test
     public void testLenientUnexpectedEof() throws Exception {
-        ByteArrayInputStream bis = new ByteArrayInputStream(
-                fromString("VGhpcyBpcyB0aGUgcGxhaW4gdGV4dCBtZXNzYWdlI"));
-        Base64InputStream decoder = new Base64InputStream(bis, false);
+        Base64InputStream decoder = create("VGhpcyBpcyB0aGUgcGxhaW4gdGV4dCBtZXNzYWdlI");
         ByteArrayOutputStream out = new ByteArrayOutputStream();
         CodecUtil.copy(decoder, out);
-        Assert.assertEquals("This is the plain text message", toString(out
-                .toByteArray()));
+        Assert.assertEquals("This is the plain text message", ContentUtil.toAsciiString(
+                out.toByteArray()));
     }
 
     @Test
     public void testStrictUnexpectedPad() throws Exception {
-        ByteArrayInputStream bis = new ByteArrayInputStream(
-                fromString("VGhpcyBpcyB0aGUgcGxhaW4gdGV4dCBtZXNzYWdlI="));
-        Base64InputStream decoder = new Base64InputStream(bis, true);
+        Base64InputStream decoder = createStrict("VGhpcyBpcyB0aGUgcGxhaW4gdGV4dCBtZXNzYWdlI=");
         try {
             CodecUtil.copy(decoder, new NullOutputStream());
             Assert.fail();
@@ -261,39 +251,11 @@ public class Base64InputStreamTest {
 
     @Test
     public void testLenientUnexpectedPad() throws Exception {
-        ByteArrayInputStream bis = new ByteArrayInputStream(
-                fromString("VGhpcyBpcyB0aGUgcGxhaW4gdGV4dCBtZXNzYWdlI="));
-        Base64InputStream decoder = new Base64InputStream(bis, false);
+        Base64InputStream decoder = create("VGhpcyBpcyB0aGUgcGxhaW4gdGV4dCBtZXNzYWdlI=");
         ByteArrayOutputStream out = new ByteArrayOutputStream();
         CodecUtil.copy(decoder, out);
-        Assert.assertEquals("This is the plain text message", toString(out
-                .toByteArray()));
+        Assert.assertEquals("This is the plain text message", ContentUtil.toAsciiString(
+                out.toByteArray()));
     }
 
-    private byte[] read(InputStream is) throws IOException {
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        int b;
-        while ((b = is.read()) != -1) {
-            bos.write(b);
-        }
-        return bos.toByteArray();
-    }
-
-    private byte[] fromString(String s) {
-        try {
-            return s.getBytes("US-ASCII");
-        } catch (UnsupportedEncodingException e) {
-            fail(e.getMessage());
-            return null;
-        }
-    }
-
-    private String toString(byte[] b) {
-        try {
-            return new String(b, "US-ASCII");
-        } catch (UnsupportedEncodingException e) {
-            fail(e.getMessage());
-            return null;
-        }
-    }
 }

Modified: james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/codec/CodecUtilTest.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/codec/CodecUtilTest.java?rev=1481113&r1=1481112&r2=1481113&view=diff
==============================================================================
--- james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/codec/CodecUtilTest.java (original)
+++ james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/codec/CodecUtilTest.java Fri May 10 17:26:02 2013
@@ -19,24 +19,27 @@
 
 package org.apache.james.mime4j.codec;
 
-import org.apache.james.mime4j.ExampleMail;
-import org.junit.Assert;
 import static org.junit.Assert.assertArrayEquals;
-import org.junit.Test;
 
-import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.nio.charset.Charset;
+
+import org.apache.james.mime4j.ExampleMail;
+import org.apache.james.mime4j.io.InputStreams;
+import org.apache.james.mime4j.util.CharsetUtil;
+import org.apache.james.mime4j.util.ContentUtil;
+import org.junit.Assert;
+import org.junit.Test;
 
 public class CodecUtilTest {
 
     @Test
     public void testCopy() throws Exception {
         byte[] content = ExampleMail.MULTIPART_WITH_BINARY_ATTACHMENTS_BYTES;
-        ByteArrayInputStream in = new ByteArrayInputStream(content);
         ByteArrayOutputStream out = new ByteArrayOutputStream();
-        CodecUtil.copy(in, out);
+        CodecUtil.copy(InputStreams.create(content), out);
         assertArrayEquals(content, out.toByteArray());
     }
 
@@ -48,17 +51,17 @@ public class CodecUtilTest {
         }
         String expected = sb.toString().replaceAll("(\\d{75})", "$1=\r\n");
 
-        InputStream in = new ByteArrayInputStream(sb.toString().getBytes("US-ASCII"));
+        InputStream in = InputStreams.createAscii(sb.toString());
         ByteArrayOutputStream out = new ByteArrayOutputStream();
         CodecUtil.encodeQuotedPrintableBinary(in, out);
-        String actual = new String(out.toByteArray(), "US-ASCII");
+        String actual = ContentUtil.toAsciiString(out.toByteArray());
         Assert.assertEquals(expected, actual);
     }
 
     @Test
     public void testEncodeQuotedPrintableNonAsciiChars() throws Exception {
         String s = "7bit content with euro \u20AC symbol";
-        InputStream in = new ByteArrayInputStream(s.getBytes("iso-8859-15"));
+        InputStream in = InputStreams.create(s, Charset.forName("iso-8859-15"));
         ByteArrayOutputStream out = new ByteArrayOutputStream();
         CodecUtil.encodeQuotedPrintableBinary(in, out);
         String actual = new String(out.toByteArray(), "US-ASCII");
@@ -79,11 +82,11 @@ public class CodecUtilTest {
     private String roundtripUsingOutputStream(String input) throws IOException {
         ByteArrayOutputStream out2 = new ByteArrayOutputStream();
         Base64OutputStream outb64 = new Base64OutputStream(out2, 76);
-        CodecUtil.copy(new ByteArrayInputStream(input.getBytes()), outb64);
+        CodecUtil.copy(InputStreams.create(input, CharsetUtil.ISO_8859_1), outb64);
         outb64.flush();
         outb64.close();
 
-        InputStream is = new Base64InputStream(new ByteArrayInputStream(out2.toByteArray()));
+        InputStream is = new Base64InputStream(InputStreams.create(out2.toByteArray()));
         ByteArrayOutputStream outRoundtrip = new ByteArrayOutputStream();
         CodecUtil.copy(is, outRoundtrip);
         return new String(outRoundtrip.toByteArray());
@@ -105,9 +108,9 @@ public class CodecUtilTest {
 
     private String roundtripUsingEncoder(String input) throws IOException {
         ByteArrayOutputStream out = new ByteArrayOutputStream();
-        CodecUtil.encodeBase64(new ByteArrayInputStream(input.getBytes()), out);
+        CodecUtil.encodeBase64(InputStreams.createAscii(input), out);
 
-        InputStream is = new Base64InputStream(new ByteArrayInputStream(out.toByteArray()));
+        InputStream is = new Base64InputStream(InputStreams.create(out.toByteArray()));
         ByteArrayOutputStream outRoundtrip = new ByteArrayOutputStream();
         CodecUtil.copy(is, outRoundtrip);
         return new String(outRoundtrip.toByteArray());

Modified: james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/codec/QuotedPrintableEncodeTest.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/codec/QuotedPrintableEncodeTest.java?rev=1481113&r1=1481112&r2=1481113&view=diff
==============================================================================
--- james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/codec/QuotedPrintableEncodeTest.java (original)
+++ james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/codec/QuotedPrintableEncodeTest.java Fri May 10 17:26:02 2013
@@ -20,11 +20,11 @@
 package org.apache.james.mime4j.codec;
 
 import org.apache.commons.io.IOUtils;
+import org.apache.james.mime4j.io.InputStreams;
 import org.apache.james.mime4j.util.CharsetUtil;
 import org.junit.Assert;
 import org.junit.Test;
 
-import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
 import java.nio.charset.Charset;
@@ -110,18 +110,18 @@ public class QuotedPrintableEncodeTest {
     }
 
     private void checkRoundtrip(byte[] content) throws Exception {
-        InputStream in = new ByteArrayInputStream(content);
+        InputStream in = InputStreams.create(content);
         ByteArrayOutputStream out = new ByteArrayOutputStream();
         CodecUtil.encodeQuotedPrintableBinary(in, out);
         // read back through decoder
-        in = new QuotedPrintableInputStream(new ByteArrayInputStream(out.toByteArray()));
+        in = new QuotedPrintableInputStream(InputStreams.create(out.toByteArray()));
         out = new ByteArrayOutputStream();
         IOUtils.copy(in, out);
         assertEquals(content, out.toByteArray());
     }
 
     private void check(byte[] content, byte[] expected) throws Exception {
-        ByteArrayInputStream in = new ByteArrayInputStream(content);
+        InputStream in = InputStreams.create(content);
         ByteArrayOutputStream out = new ByteArrayOutputStream();
         CodecUtil.encodeQuotedPrintableBinary(in, out);
         assertEquals(expected, out.toByteArray());

Modified: james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/codec/QuotedPrintableInputStreamTest.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/codec/QuotedPrintableInputStreamTest.java?rev=1481113&r1=1481112&r2=1481113&view=diff
==============================================================================
--- james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/codec/QuotedPrintableInputStreamTest.java (original)
+++ james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/codec/QuotedPrintableInputStreamTest.java Fri May 10 17:26:02 2013
@@ -19,88 +19,92 @@
 
 package org.apache.james.mime4j.codec;
 
-import org.junit.Assert;
-import org.junit.Test;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.UnsupportedEncodingException;
 
+import org.apache.commons.io.IOUtils;
+import org.apache.james.mime4j.io.InputStreams;
+import org.apache.james.mime4j.util.CharsetUtil;
+import org.junit.Assert;
+import org.junit.Test;
+
 public class QuotedPrintableInputStreamTest {
 
+    private static String readText(final InputStream is) throws IOException {
+        return new String(IOUtils.toByteArray(is), CharsetUtil.ISO_8859_1.name());
+    }
+
     @Test
     public void testBasicDecode() throws IOException, UnsupportedEncodingException {
-        ByteArrayInputStream bis = new ByteArrayInputStream("=e1=e2=E3=E4\r\n".getBytes("US-ASCII"));
+        InputStream bis = InputStreams.createAscii("=e1=e2=E3=E4\r\n");
         QuotedPrintableInputStream decoder = new QuotedPrintableInputStream(bis);
-        Assert.assertEquals("\u00e1\u00e2\u00e3\u00e4\r\n", new String(read(decoder), "ISO8859-1"));
+        Assert.assertEquals("\u00e1\u00e2\u00e3\u00e4\r\n", readText(decoder));
     }
 
     @Test
     public void testDecodeBufferWrapping() throws IOException, UnsupportedEncodingException {
-        ByteArrayInputStream bis = new ByteArrayInputStream(
-                "=e1=e2=E3=E4\r\n=e1=e2=E3=E4\r\n=e1=e2=E3=E4\r\n=e1=e2=E3=E4\r\n=e1=e2=E3=E4\r\n".getBytes("US-ASCII"));
+        InputStream bis = InputStreams.createAscii("=e1=e2=E3=E4\r\n=e1=e2=E3=E4\r\n=e1=e2=E3=E4\r\n=e1=e2=E3=E4\r\n=e1=e2=E3=E4\r\n");
         QuotedPrintableInputStream decoder = new QuotedPrintableInputStream(bis);
         Assert.assertEquals("\u00e1\u00e2\u00e3\u00e4\r\n\u00e1\u00e2\u00e3\u00e4\r\n\u00e1\u00e2\u00e3" +
-                "\u00e4\r\n\u00e1\u00e2\u00e3\u00e4\r\n\u00e1\u00e2\u00e3\u00e4\r\n", new String(read(decoder), "ISO8859-1"));
+                "\u00e4\r\n\u00e1\u00e2\u00e3\u00e4\r\n\u00e1\u00e2\u00e3\u00e4\r\n", readText(decoder));
     }
 
     @Test
     public void testInvalidValueDecode() throws IOException, UnsupportedEncodingException {
-        ByteArrayInputStream bis = new ByteArrayInputStream("=e1=g2=E3=E4\r\n".getBytes("US-ASCII"));
+        InputStream bis = InputStreams.createAscii("=e1=g2=E3=E4\r\n");
         QuotedPrintableInputStream decoder = new QuotedPrintableInputStream(bis);
-        Assert.assertEquals("\u00e1=g2\u00e3\u00e4\r\n", new String(read(decoder), "ISO8859-1"));
+        Assert.assertEquals("\u00e1=g2\u00e3\u00e4\r\n", readText(decoder));
     }
 
     @Test
     public void testDecodeTrailingBlanks() throws IOException, UnsupportedEncodingException {
-        ByteArrayInputStream bis = new ByteArrayInputStream("   =e1 =e2  =E3\t=E4  \t \t    \r\n".getBytes("US-ASCII"));
+        InputStream bis = InputStreams.createAscii("   =e1 =e2  =E3\t=E4  \t \t    \r\n");
         QuotedPrintableInputStream decoder = new QuotedPrintableInputStream(bis);
-        Assert.assertEquals("   \u00e1 \u00e2  \u00e3\t\u00e4\r\n", new String(read(decoder), "ISO8859-1"));
+        Assert.assertEquals("   \u00e1 \u00e2  \u00e3\t\u00e4\r\n", readText(decoder));
     }
 
     @Test
     public void testCanonicalSoftBreakDecode() throws IOException, UnsupportedEncodingException {
-        ByteArrayInputStream bis = new ByteArrayInputStream("Soft line   =\r\nHard line   \r\n".getBytes("US-ASCII"));
+        InputStream bis = InputStreams.createAscii("Soft line   =\r\nHard line   \r\n");
         QuotedPrintableInputStream decoder = new QuotedPrintableInputStream(bis);
-        Assert.assertEquals("Soft line   Hard line\r\n", new String(read(decoder), "ISO8859-1"));
+        Assert.assertEquals("Soft line   Hard line\r\n", readText(decoder));
     }
 
     @Test
     public void testInvalidCR() throws IOException, UnsupportedEncodingException {
-        ByteArrayInputStream bis = new ByteArrayInputStream("Invalid=\rCR\rHard line   \r\n".getBytes("US-ASCII"));
+        InputStream bis = InputStreams.createAscii("Invalid=\rCR\rHard line   \r\n");
         QuotedPrintableInputStream decoder = new QuotedPrintableInputStream(bis);
         // TODO is this what we really expect from decoding a stream including CR with no LF?
-        Assert.assertEquals("Invalid=\rCR\rHard line\r\n", new String(read(decoder), "ISO8859-1"));
+        Assert.assertEquals("Invalid=\rCR\rHard line\r\n", readText(decoder));
     }
 
     @Test
     public void testSoftBreakLoneLFDecode() throws IOException, UnsupportedEncodingException {
-        ByteArrayInputStream bis = new ByteArrayInputStream("Soft line   =\nHard line   \r\n".getBytes("US-ASCII"));
+        InputStream bis = InputStreams.createAscii("Soft line   =\nHard line   \r\n");
         QuotedPrintableInputStream decoder = new QuotedPrintableInputStream(bis);
-        Assert.assertEquals("Soft line   Hard line\r\n", new String(read(decoder), "ISO8859-1"));
+        Assert.assertEquals("Soft line   Hard line\r\n", readText(decoder));
     }
 
     @Test
     public void testSoftBreakTrailingBalnksDecode() throws IOException, UnsupportedEncodingException {
-        ByteArrayInputStream bis = new ByteArrayInputStream("Soft line   = \t \r\nHard line   \r\n".getBytes("US-ASCII"));
+        InputStream bis = InputStreams.createAscii("Soft line   = \t \r\nHard line   \r\n");
         QuotedPrintableInputStream decoder = new QuotedPrintableInputStream(bis);
-        Assert.assertEquals("Soft line   Hard line\r\n", new String(read(decoder), "ISO8859-1"));
+        Assert.assertEquals("Soft line   Hard line\r\n", readText(decoder));
     }
 
     @Test
     public void testBrokenSoftBreakDecode() throws IOException, UnsupportedEncodingException {
-        ByteArrayInputStream bis = new ByteArrayInputStream("Soft line   =\rHard line   \r\n".getBytes("US-ASCII"));
+        InputStream bis = InputStreams.createAscii("Soft line   =\rHard line   \r\n");
         QuotedPrintableInputStream decoder = new QuotedPrintableInputStream(bis);
-        Assert.assertEquals("Soft line   =\rHard line\r\n", new String(read(decoder), "ISO8859-1"));
+        Assert.assertEquals("Soft line   =\rHard line\r\n", readText(decoder));
     }
 
     @Test
     public void testEscapedEQDecode() throws IOException, UnsupportedEncodingException {
-        ByteArrayInputStream bis = new ByteArrayInputStream("width==340 height=3d200\r\n".getBytes("US-ASCII"));
+        InputStream bis = InputStreams.createAscii("width==340 height=3d200\r\n");
         QuotedPrintableInputStream decoder = new QuotedPrintableInputStream(bis);
-        Assert.assertEquals("width=340 height=200\r\n", new String(read(decoder), "ISO8859-1"));
+        Assert.assertEquals("width=340 height=200\r\n", readText(decoder));
         // TODO this could be even decoded as width=40 height=200.
     }
 
@@ -110,68 +114,65 @@ public class QuotedPrintableInputStreamT
          * This isn't valid qp (==) but it is known to occur in certain
          * messages, especially spam.
          */
-        ByteArrayInputStream bis = new ByteArrayInputStream("width==\r\n340 height=3d200\r\n".getBytes("US-ASCII"));
+        InputStream bis = InputStreams.createAscii("width==\r\n340 height=3d200\r\n");
         QuotedPrintableInputStream decoder = new QuotedPrintableInputStream(bis);
-        Assert.assertEquals("width=340 height=200\r\n", new String(read(decoder), "ISO8859-1"));
+        Assert.assertEquals("width=340 height=200\r\n", readText(decoder));
     }
 
     @Test
     public void testSpacesBeforeEOL() throws IOException, UnsupportedEncodingException {
-        ByteArrayInputStream bis = new ByteArrayInputStream("some \r\n spaced\t\r\ncontent \t \r\n".getBytes("US-ASCII"));
+        InputStream bis = InputStreams.createAscii("some \r\n spaced\t\r\ncontent \t \r\n");
         QuotedPrintableInputStream decoder = new QuotedPrintableInputStream(bis);
-        Assert.assertEquals("some\r\n spaced\r\ncontent\r\n", new String(read(decoder), "ISO8859-1"));
+        Assert.assertEquals("some\r\n spaced\r\ncontent\r\n", readText(decoder));
     }
 
 
     @Test
     public void testDecodeEndOfStream1() throws IOException, UnsupportedEncodingException {
-        ByteArrayInputStream bis = new ByteArrayInputStream("01234567".getBytes("US-ASCII"));
+        InputStream bis = InputStreams.createAscii("01234567");
         QuotedPrintableInputStream decoder = new QuotedPrintableInputStream(6, bis, false);
-        Assert.assertEquals("01234567", new String(read(decoder), "ISO8859-1"));
+        Assert.assertEquals("01234567", readText(decoder));
     }
 
     @Test
     public void testDecodeEndOfStream2() throws IOException, UnsupportedEncodingException {
-        ByteArrayInputStream bis = new ByteArrayInputStream("012345\r".getBytes("US-ASCII"));
+        InputStream bis = InputStreams.createAscii("012345\r");
         QuotedPrintableInputStream decoder = new QuotedPrintableInputStream(6, bis, false);
-        Assert.assertEquals("012345", new String(read(decoder), "ISO8859-1"));
+        Assert.assertEquals("012345", readText(decoder));
     }
 
     @Test
     public void testDecodeEndOfStream3() throws IOException, UnsupportedEncodingException {
-        ByteArrayInputStream bis = new ByteArrayInputStream("012345\n".getBytes("US-ASCII"));
+        InputStream bis = InputStreams.createAscii("012345\n");
         QuotedPrintableInputStream decoder = new QuotedPrintableInputStream(6, bis, false);
-        Assert.assertEquals("012345\r\n", new String(read(decoder), "ISO8859-1"));
+        Assert.assertEquals("012345\r\n", readText(decoder));
     }
 
     @Test
     public void testDecodeEndOfStream4() throws IOException, UnsupportedEncodingException {
-        ByteArrayInputStream bis = new ByteArrayInputStream("01234= ".getBytes("US-ASCII"));
+        InputStream bis = InputStreams.createAscii("01234= ");
         QuotedPrintableInputStream decoder = new QuotedPrintableInputStream(6, bis, false);
-        Assert.assertEquals("01234", new String(read(decoder), "ISO8859-1"));
+        Assert.assertEquals("01234", readText(decoder));
     }
 
     @Test
     public void testDecodeEndOfStream5() throws IOException, UnsupportedEncodingException {
-        ByteArrayInputStream bis = new ByteArrayInputStream("01234=\r\n".getBytes("US-ASCII"));
+        InputStream bis = InputStreams.createAscii("01234=\r\n");
         QuotedPrintableInputStream decoder = new QuotedPrintableInputStream(6, bis, false);
-        Assert.assertEquals("01234", new String(read(decoder), "ISO8859-1"));
+        Assert.assertEquals("01234", readText(decoder));
     }
 
     @Test
     public void testDecodeEndOfStream6() throws IOException, UnsupportedEncodingException {
-        ByteArrayInputStream bis = new ByteArrayInputStream("01234\r\n".getBytes("US-ASCII"));
+        InputStream bis = InputStreams.createAscii("01234\r\n");
         QuotedPrintableInputStream decoder = new QuotedPrintableInputStream(6, bis, false);
-        Assert.assertEquals("01234\r\n", new String(read(decoder), "ISO8859-1"));
+        Assert.assertEquals("01234\r\n", readText(decoder));
     }
 
     @Test
     public void testDecodePrematureClose() throws IOException, UnsupportedEncodingException {
-        ByteArrayInputStream bis;
-        QuotedPrintableInputStream decoder;
-
-        bis = new ByteArrayInputStream("=e1=e2=E3=E4\r\n".getBytes("US-ASCII"));
-        decoder = new QuotedPrintableInputStream(bis);
+        InputStream bis = InputStreams.createAscii("=e1=e2=E3=E4\r\n");
+        QuotedPrintableInputStream decoder = new QuotedPrintableInputStream(bis);
         Assert.assertEquals('\u00e1', decoder.read());
         Assert.assertEquals('\u00e2', decoder.read());
         decoder.close();
@@ -183,12 +184,4 @@ public class QuotedPrintableInputStreamT
         }
     }
 
-    private byte[] read(InputStream is) throws IOException {
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        int b;
-        while ((b = is.read()) != -1) {
-            bos.write(b);
-        }
-        return bos.toByteArray();
-    }
 }

Modified: james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/codec/QuotedPrintableTextEncodeTest.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/codec/QuotedPrintableTextEncodeTest.java?rev=1481113&r1=1481112&r2=1481113&view=diff
==============================================================================
--- james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/codec/QuotedPrintableTextEncodeTest.java (original)
+++ james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/codec/QuotedPrintableTextEncodeTest.java Fri May 10 17:26:02 2013
@@ -20,11 +20,11 @@
 package org.apache.james.mime4j.codec;
 
 import org.apache.commons.io.IOUtils;
+import org.apache.james.mime4j.io.InputStreams;
 import org.apache.james.mime4j.util.CharsetUtil;
 import org.junit.Assert;
 import org.junit.Test;
 
-import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
 import java.nio.charset.Charset;
@@ -153,11 +153,11 @@ public class QuotedPrintableTextEncodeTe
     }
 
     private void checkRoundtrip(byte[] content) throws Exception {
-        InputStream in = new ByteArrayInputStream(content);
+        InputStream in = InputStreams.create(content);
         ByteArrayOutputStream out = new ByteArrayOutputStream();
         CodecUtil.encodeQuotedPrintable(in, out);
         // read back through decoder
-        in = new QuotedPrintableInputStream(new ByteArrayInputStream(out.toByteArray()));
+        in = new QuotedPrintableInputStream(InputStreams.create(out.toByteArray()));
         out = new ByteArrayOutputStream();
         IOUtils.copy(in, out);
         assertEquals(content, out.toByteArray());
@@ -170,7 +170,7 @@ public class QuotedPrintableTextEncodeTe
 
 
     private void check(byte[] content, byte[] expected) throws Exception {
-        ByteArrayInputStream in = new ByteArrayInputStream(content);
+        InputStream in = InputStreams.create(content);
         ByteArrayOutputStream out = new ByteArrayOutputStream();
         CodecUtil.encodeQuotedPrintable(in, out);
         assertEquals(expected, out.toByteArray());

Modified: james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/BufferedLineReaderInputStreamBufferTest.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/BufferedLineReaderInputStreamBufferTest.java?rev=1481113&r1=1481112&r2=1481113&view=diff
==============================================================================
--- james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/BufferedLineReaderInputStreamBufferTest.java (original)
+++ james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/BufferedLineReaderInputStreamBufferTest.java Fri May 10 17:26:02 2013
@@ -19,21 +19,26 @@
 
 package org.apache.james.mime4j.io;
 
+import org.apache.james.mime4j.util.ContentUtil;
 import org.junit.Assert;
 import org.junit.Test;
 
-import java.io.ByteArrayInputStream;
-
 public class BufferedLineReaderInputStreamBufferTest {
 
+    private static BufferedLineReaderInputStream create(final String s) {
+        return new BufferedLineReaderInputStream(InputStreams.createAscii(s), 4096);
+    }
+
+    private static BufferedLineReaderInputStream create(final byte[] b) {
+        return new BufferedLineReaderInputStream(InputStreams.create(b), 4096);
+    }
+
     @Test
     public void testInvalidInput() throws Exception {
         String text = "blah blah yada yada";
-        byte[] b1 = text.getBytes("US-ASCII");
         String pattern = "blah";
-        byte[] b2 = pattern.getBytes("US-ASCII");
-        BufferedLineReaderInputStream inbuffer = new BufferedLineReaderInputStream(
-                new ByteArrayInputStream(b1), 4096);
+        byte[] b2 = ContentUtil.toAsciiByteArray(pattern);
+        BufferedLineReaderInputStream inbuffer = create(text);
         inbuffer.fillBuffer();
 
         Assert.assertEquals('b', inbuffer.read());
@@ -97,9 +102,7 @@ public class BufferedLineReaderInputStre
     @Test
     public void testBasicOperations() throws Exception {
         String text = "bla bla yada yada haha haha";
-        byte[] b1 = text.getBytes("US-ASCII");
-        BufferedLineReaderInputStream inbuffer = new BufferedLineReaderInputStream(
-                new ByteArrayInputStream(b1), 4096);
+        BufferedLineReaderInputStream inbuffer = create(text);
         inbuffer.fillBuffer();
         Assert.assertEquals(0, inbuffer.pos());
         Assert.assertEquals(27, inbuffer.limit());
@@ -138,10 +141,8 @@ public class BufferedLineReaderInputStre
     public void testPatternMatching1() throws Exception {
         String text = "blabla d is the word";
         String pattern = "d";
-        byte[] b1 = text.getBytes("US-ASCII");
-        byte[] b2 = pattern.getBytes("US-ASCII");
-        BufferedLineReaderInputStream inbuffer = new BufferedLineReaderInputStream(
-                new ByteArrayInputStream(b1), 4096);
+        byte[] b2 = ContentUtil.toAsciiByteArray(pattern);
+        BufferedLineReaderInputStream inbuffer = create(text);
         inbuffer.fillBuffer();
         int i = inbuffer.indexOf(b2);
         Assert.assertEquals(7, i);
@@ -153,10 +154,8 @@ public class BufferedLineReaderInputStre
     public void testPatternMatching2() throws Exception {
         String text = "disddisdissdsidsidsiid";
         String pattern = "siid";
-        byte[] b1 = text.getBytes("US-ASCII");
-        byte[] b2 = pattern.getBytes("US-ASCII");
-        BufferedLineReaderInputStream inbuffer = new BufferedLineReaderInputStream(
-                new ByteArrayInputStream(b1), 4096);
+        byte[] b2 = ContentUtil.toAsciiByteArray(pattern);
+        BufferedLineReaderInputStream inbuffer = create(text);
         inbuffer.fillBuffer();
         int i = inbuffer.indexOf(b2);
         Assert.assertEquals(18, i);
@@ -168,10 +167,8 @@ public class BufferedLineReaderInputStre
     public void testPatternMatching3() throws Exception {
         String text = "bla bla yada yada haha haha";
         String pattern = "blah";
-        byte[] b1 = text.getBytes("US-ASCII");
-        byte[] b2 = pattern.getBytes("US-ASCII");
-        BufferedLineReaderInputStream inbuffer = new BufferedLineReaderInputStream(
-                new ByteArrayInputStream(b1), 4096);
+        byte[] b2 = ContentUtil.toAsciiByteArray(pattern);
+        BufferedLineReaderInputStream inbuffer = create(text);
         inbuffer.fillBuffer();
         int i = inbuffer.indexOf(b2);
         Assert.assertEquals(-1, i);
@@ -183,10 +180,8 @@ public class BufferedLineReaderInputStre
     public void testPatternMatching4() throws Exception {
         String text = "bla bla yada yada haha haha";
         String pattern = "bla";
-        byte[] b1 = text.getBytes("US-ASCII");
-        byte[] b2 = pattern.getBytes("US-ASCII");
-        BufferedLineReaderInputStream inbuffer = new BufferedLineReaderInputStream(
-                new ByteArrayInputStream(b1), 4096);
+        byte[] b2 = ContentUtil.toAsciiByteArray(pattern);
+        BufferedLineReaderInputStream inbuffer = create(text);
         inbuffer.fillBuffer();
         int i = inbuffer.indexOf(b2);
         Assert.assertEquals(0, i);
@@ -198,10 +193,8 @@ public class BufferedLineReaderInputStre
     public void testPatternOutOfBound() throws Exception {
         String text = "bla bla yada yada haha haha";
         String pattern1 = "bla bla";
-        byte[] b1 = text.getBytes("US-ASCII");
-        byte[] b2 = pattern1.getBytes("US-ASCII");
-        BufferedLineReaderInputStream inbuffer = new BufferedLineReaderInputStream(
-                new ByteArrayInputStream(b1), 4096);
+        byte[] b2 = ContentUtil.toAsciiByteArray(pattern1);
+        BufferedLineReaderInputStream inbuffer = create(text);
         inbuffer.fillBuffer();
         byte[] tmp = new byte[3];
         inbuffer.read(tmp);
@@ -216,9 +209,7 @@ public class BufferedLineReaderInputStre
     @Test
     public void testCharOutOfBound() throws Exception {
         String text = "zzz blah blah blah ggg";
-        byte[] b1 = text.getBytes("US-ASCII");
-        BufferedLineReaderInputStream inbuffer = new BufferedLineReaderInputStream(
-                new ByteArrayInputStream(b1), 4096);
+        BufferedLineReaderInputStream inbuffer = create(text);
         inbuffer.fillBuffer();
         byte[] tmp = new byte[3];
         inbuffer.read(tmp);
@@ -234,8 +225,7 @@ public class BufferedLineReaderInputStre
     public void test0xFFInBinaryStream() throws Exception {
         byte[] b1 = new byte[]{1, 2, 3, (byte) 0xff, 10, 1, 2, 3};
         byte[] b2 = new byte[]{10};
-        BufferedLineReaderInputStream inbuffer = new BufferedLineReaderInputStream(
-                new ByteArrayInputStream(b1), 4096);
+        BufferedLineReaderInputStream inbuffer = create(b1);
         inbuffer.fillBuffer();
         int i = inbuffer.indexOf(b2);
         Assert.assertEquals(4, i);

Modified: james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/BufferedLineReaderInputStreamTest.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/BufferedLineReaderInputStreamTest.java?rev=1481113&r1=1481112&r2=1481113&view=diff
==============================================================================
--- james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/BufferedLineReaderInputStreamTest.java (original)
+++ james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/BufferedLineReaderInputStreamTest.java Fri May 10 17:26:02 2013
@@ -20,20 +20,28 @@
 package org.apache.james.mime4j.io;
 
 import org.apache.james.mime4j.util.ByteArrayBuffer;
+import org.apache.james.mime4j.util.ContentUtil;
 import org.junit.Assert;
 import org.junit.Test;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-
 public class BufferedLineReaderInputStreamTest {
 
+    private static BufferedLineReaderInputStream create(final String s, int bufSize) {
+        return new BufferedLineReaderInputStream(InputStreams.createAscii(s), bufSize);
+    }
+
+    private static BufferedLineReaderInputStream create(final byte[] b, int bufSize) {
+        return new BufferedLineReaderInputStream(InputStreams.create(b), bufSize);
+    }
+
+    private static BufferedLineReaderInputStream create(final byte[] b, int bufSize, int maxLen) {
+        return new BufferedLineReaderInputStream(InputStreams.create(b), bufSize, maxLen);
+    }
+
     @Test
     public void testBasicOperations() throws Exception {
         String text = "ah blahblah";
-        byte[] b1 = text.getBytes("US-ASCII");
-        BufferedLineReaderInputStream instream = new BufferedLineReaderInputStream(
-                new ByteArrayInputStream(b1), 4096);
+        BufferedLineReaderInputStream instream = create(text, 32);
 
         Assert.assertEquals((byte) 'a', instream.read());
         Assert.assertEquals((byte) 'h', instream.read());
@@ -67,21 +75,21 @@ public class BufferedLineReaderInputStre
         teststrs[3] = "\r\n";
         teststrs[4] = "And goodbye\r\n";
 
-        ByteArrayOutputStream outstream = new ByteArrayOutputStream();
+        ByteArrayBuffer buf = new ByteArrayBuffer(128);
 
         for (String teststr : teststrs) {
-            outstream.write(teststr.getBytes("US-ASCII"));
+            byte[] b = ContentUtil.toAsciiByteArray(teststr);
+            buf.append(b, 0, b.length);
         }
-        byte[] raw = outstream.toByteArray();
+        byte[] raw = buf.toByteArray();
 
-        BufferedLineReaderInputStream instream = new BufferedLineReaderInputStream(
-                new ByteArrayInputStream(raw), 16);
+        BufferedLineReaderInputStream instream = create(raw, 16);
 
         ByteArrayBuffer linebuf = new ByteArrayBuffer(8);
         for (String teststr : teststrs) {
             linebuf.clear();
             instream.readLine(linebuf);
-            String s = new String(linebuf.toByteArray(), "US-ASCII");
+            String s = ContentUtil.toAsciiString(linebuf);
             Assert.assertEquals(teststr, s);
         }
         Assert.assertEquals(-1, instream.readLine(linebuf));
@@ -94,55 +102,54 @@ public class BufferedLineReaderInputStre
     public void testReadEmptyLine() throws Exception {
 
         String teststr = "\n\n\r\n\r\r\n\n\n\n\n\n";
-        byte[] raw = teststr.getBytes("US-ASCII");
+        byte[] raw = ContentUtil.toAsciiByteArray(teststr);
 
-        LineReaderInputStream instream = new BufferedLineReaderInputStream(
-                new ByteArrayInputStream(raw), 4);
+        BufferedLineReaderInputStream instream = create(raw, 4);
 
         ByteArrayBuffer linebuf = new ByteArrayBuffer(8);
         linebuf.clear();
         instream.readLine(linebuf);
-        String s = new String(linebuf.toByteArray(), "US-ASCII");
+        String s = ContentUtil.toAsciiString(linebuf);
         Assert.assertEquals("\n", s);
 
         linebuf.clear();
         instream.readLine(linebuf);
-        s = new String(linebuf.toByteArray(), "US-ASCII");
+        s = ContentUtil.toAsciiString(linebuf);
         Assert.assertEquals("\n", s);
 
         linebuf.clear();
         instream.readLine(linebuf);
-        s = new String(linebuf.toByteArray(), "US-ASCII");
+        s = ContentUtil.toAsciiString(linebuf);
         Assert.assertEquals("\r\n", s);
 
         linebuf.clear();
         instream.readLine(linebuf);
-        s = new String(linebuf.toByteArray(), "US-ASCII");
+        s = ContentUtil.toAsciiString(linebuf);
         Assert.assertEquals("\r\r\n", s);
 
         linebuf.clear();
         instream.readLine(linebuf);
-        s = new String(linebuf.toByteArray(), "US-ASCII");
+        s = ContentUtil.toAsciiString(linebuf);
         Assert.assertEquals("\n", s);
 
         linebuf.clear();
         instream.readLine(linebuf);
-        s = new String(linebuf.toByteArray(), "US-ASCII");
+        s = ContentUtil.toAsciiString(linebuf);
         Assert.assertEquals("\n", s);
 
         linebuf.clear();
         instream.readLine(linebuf);
-        s = new String(linebuf.toByteArray(), "US-ASCII");
+        s = ContentUtil.toAsciiString(linebuf);
         Assert.assertEquals("\n", s);
 
         linebuf.clear();
         instream.readLine(linebuf);
-        s = new String(linebuf.toByteArray(), "US-ASCII");
+        s = ContentUtil.toAsciiString(linebuf);
         Assert.assertEquals("\n", s);
 
         linebuf.clear();
         instream.readLine(linebuf);
-        s = new String(linebuf.toByteArray(), "US-ASCII");
+        s = ContentUtil.toAsciiString(linebuf);
         Assert.assertEquals("\n", s);
 
         Assert.assertEquals(-1, instream.readLine(linebuf));
@@ -155,17 +162,15 @@ public class BufferedLineReaderInputStre
     public void testReadEmptyLineMaxLimit() throws Exception {
 
         String teststr = "1234567890\r\n";
-        byte[] raw = teststr.getBytes("US-ASCII");
+        byte[] raw = ContentUtil.toAsciiByteArray(teststr);
 
-        LineReaderInputStream instream1 = new BufferedLineReaderInputStream(
-                new ByteArrayInputStream(raw), 1024, 13);
+        LineReaderInputStream instream1 = create(raw, 1024, 13);
         ByteArrayBuffer linebuf = new ByteArrayBuffer(8);
         linebuf.clear();
         instream1.readLine(linebuf);
         instream1.close();
 
-        LineReaderInputStream instream2 = new BufferedLineReaderInputStream(
-                new ByteArrayInputStream(raw), 1024, 12);
+        LineReaderInputStream instream2 = create(raw, 1024, 12);
         linebuf.clear();
         try {
             instream2.readLine(linebuf);

Modified: james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/EOLConvertingInputStreamTest.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/EOLConvertingInputStreamTest.java?rev=1481113&r1=1481112&r2=1481113&view=diff
==============================================================================
--- james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/EOLConvertingInputStreamTest.java (original)
+++ james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/EOLConvertingInputStreamTest.java Fri May 10 17:26:02 2013
@@ -19,14 +19,12 @@
 
 package org.apache.james.mime4j.io;
 
+import java.io.IOException;
+
+import org.apache.james.mime4j.util.ContentUtil;
 import org.junit.Assert;
-import static org.junit.Assert.fail;
 import org.junit.Test;
 
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-
 public class EOLConvertingInputStreamTest {
 
     @Test
@@ -67,12 +65,11 @@ public class EOLConvertingInputStreamTes
     private void testConvertBoth(String s1, String s2) throws IOException {
         byte[] bytes = new byte[1024];
 
-        ByteArrayInputStream bais = new ByteArrayInputStream(fromString(s1));
         EOLConvertingInputStream in =
-                new EOLConvertingInputStream(bais,
+                new EOLConvertingInputStream(InputStreams.createAscii(s1),
                         EOLConvertingInputStream.CONVERT_BOTH);
         int n = in.read(bytes);
-        Assert.assertEquals(s2, toString(bytes, n));
+        Assert.assertEquals(s2, ContentUtil.toAsciiString(bytes, 0, n > 0 ? n : 0));
 
         in.close();
     }
@@ -80,12 +77,11 @@ public class EOLConvertingInputStreamTes
     private void testConvertCR(String s1, String s2) throws IOException {
         byte[] bytes = new byte[1024];
 
-        ByteArrayInputStream bais = new ByteArrayInputStream(fromString(s1));
         EOLConvertingInputStream in =
-                new EOLConvertingInputStream(bais,
+                new EOLConvertingInputStream(InputStreams.createAscii(s1),
                         EOLConvertingInputStream.CONVERT_CR);
         int n = in.read(bytes);
-        Assert.assertEquals(s2, toString(bytes, n));
+        Assert.assertEquals(s2, ContentUtil.toAsciiString(bytes, 0, n > 0 ? n : 0));
 
         in.close();
     }
@@ -93,34 +89,13 @@ public class EOLConvertingInputStreamTes
     private void testConvertLF(String s1, String s2) throws IOException {
         byte[] bytes = new byte[1024];
 
-        ByteArrayInputStream bais = new ByteArrayInputStream(fromString(s1));
         EOLConvertingInputStream in =
-                new EOLConvertingInputStream(bais,
+                new EOLConvertingInputStream(InputStreams.createAscii(s1),
                         EOLConvertingInputStream.CONVERT_LF);
         int n = in.read(bytes);
-        Assert.assertEquals(s2, toString(bytes, n));
+        Assert.assertEquals(s2, ContentUtil.toAsciiString(bytes, 0, n > 0 ? n : 0));
 
         in.close();
     }
 
-    private String toString(byte[] b, int len) {
-        try {
-            if (len == -1) {
-                return "";
-            }
-            return new String(b, 0, len, "US-ASCII");
-        } catch (UnsupportedEncodingException e) {
-            fail(e.getMessage());
-            return null;
-        }
-    }
-
-    private byte[] fromString(String s) {
-        try {
-            return s.getBytes("US-ASCII");
-        } catch (UnsupportedEncodingException e) {
-            fail(e.getMessage());
-            return null;
-        }
-    }
 }

Modified: james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/LimitedInputStreamTest.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/LimitedInputStreamTest.java?rev=1481113&r1=1481112&r2=1481113&view=diff
==============================================================================
--- james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/LimitedInputStreamTest.java (original)
+++ james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/LimitedInputStreamTest.java Fri May 10 17:26:02 2013
@@ -22,7 +22,6 @@ package org.apache.james.mime4j.io;
 import org.junit.Assert;
 import org.junit.Test;
 
-import java.io.ByteArrayInputStream;
 import java.io.IOException;
 
 public class LimitedInputStreamTest {
@@ -30,8 +29,7 @@ public class LimitedInputStreamTest {
     @Test
     public void testUpToLimitRead() throws IOException {
         byte[] data = new byte[]{'0', '1', '2', '3', '4', '5', '6'};
-        ByteArrayInputStream instream = new ByteArrayInputStream(data);
-        LimitedInputStream limitedStream = new LimitedInputStream(instream, 3);
+        LimitedInputStream limitedStream = new LimitedInputStream(InputStreams.create(data), 3);
         Assert.assertEquals(0, limitedStream.getPosition());
         Assert.assertTrue(limitedStream.read() != -1);
         Assert.assertEquals(1, limitedStream.getPosition());

Modified: james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/LineNumberInputStreamTest.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/LineNumberInputStreamTest.java?rev=1481113&r1=1481112&r2=1481113&view=diff
==============================================================================
--- james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/LineNumberInputStreamTest.java (original)
+++ james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/LineNumberInputStreamTest.java Fri May 10 17:26:02 2013
@@ -22,7 +22,6 @@ package org.apache.james.mime4j.io;
 import org.junit.Assert;
 import org.junit.Test;
 
-import java.io.ByteArrayInputStream;
 import java.io.IOException;
 
 public class LineNumberInputStreamTest {
@@ -32,8 +31,7 @@ public class LineNumberInputStreamTest {
     @Test
     public void testReadSingleByte() throws IOException {
         String s = "Yada\r\nyada\r\nyada\r\n";
-        LineNumberInputStream is = new LineNumberInputStream(
-                new ByteArrayInputStream(s.getBytes()));
+        LineNumberInputStream is = new LineNumberInputStream(InputStreams.createAscii(s));
 
         for (int i = 0; i < 6; i++) {
             Assert.assertEquals(1, is.getLineNumber());
@@ -63,8 +61,7 @@ public class LineNumberInputStreamTest {
     @Test
     public void testReadManyBytes() throws IOException {
         String s = "Yada\r\nyada\r\nyada\r\n";
-        LineNumberInputStream is = new LineNumberInputStream(
-                new ByteArrayInputStream(s.getBytes()));
+        LineNumberInputStream is = new LineNumberInputStream(InputStreams.createAscii(s));
 
         byte[] buf = new byte[4];
         Assert.assertEquals(1, is.getLineNumber());

Modified: james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/LineReaderInputStreamAdaptorTest.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/LineReaderInputStreamAdaptorTest.java?rev=1481113&r1=1481112&r2=1481113&view=diff
==============================================================================
--- james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/LineReaderInputStreamAdaptorTest.java (original)
+++ james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/LineReaderInputStreamAdaptorTest.java Fri May 10 17:26:02 2013
@@ -20,21 +20,28 @@
 package org.apache.james.mime4j.io;
 
 import org.apache.james.mime4j.util.ByteArrayBuffer;
+import org.apache.james.mime4j.util.ContentUtil;
 import org.junit.Assert;
 import org.junit.Test;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-
 public class LineReaderInputStreamAdaptorTest {
 
+    private static LineReaderInputStreamAdaptor create(final String s) {
+        return new LineReaderInputStreamAdaptor(InputStreams.createAscii(s));
+    }
+
+    private static LineReaderInputStreamAdaptor create(final byte[] b) {
+        return new LineReaderInputStreamAdaptor(InputStreams.create(b));
+    }
+
+    private static LineReaderInputStreamAdaptor create(final byte[] b, int bufSize) {
+        return new LineReaderInputStreamAdaptor(InputStreams.create(b), bufSize);
+    }
+
     @Test
     public void testBasicOperations() throws Exception {
         String text = "ah blahblah";
-        byte[] b1 = text.getBytes("US-ASCII");
-
-        LineReaderInputStreamAdaptor instream = new LineReaderInputStreamAdaptor(
-                new ByteArrayInputStream(b1));
+        LineReaderInputStreamAdaptor instream = create(text);
 
         Assert.assertEquals((byte) 'a', instream.read());
         Assert.assertEquals((byte) 'h', instream.read());
@@ -68,21 +75,21 @@ public class LineReaderInputStreamAdapto
         teststrs[3] = "\r\n";
         teststrs[4] = "And goodbye\r\n";
 
-        ByteArrayOutputStream outstream = new ByteArrayOutputStream();
+        ByteArrayBuffer buf = new ByteArrayBuffer(128);
 
         for (String teststr : teststrs) {
-            outstream.write(teststr.getBytes("US-ASCII"));
+            byte[] b = ContentUtil.toAsciiByteArray(teststr);
+            buf.append(b, 0, b.length);
         }
-        byte[] raw = outstream.toByteArray();
+        byte[] raw = buf.toByteArray();
 
-        LineReaderInputStreamAdaptor instream = new LineReaderInputStreamAdaptor(
-                new ByteArrayInputStream(raw));
+        LineReaderInputStreamAdaptor instream = create(raw);
 
         ByteArrayBuffer linebuf = new ByteArrayBuffer(8);
         for (String teststr : teststrs) {
             linebuf.clear();
             instream.readLine(linebuf);
-            String s = new String(linebuf.toByteArray(), "US-ASCII");
+            String s = ContentUtil.toAsciiString(linebuf);
             Assert.assertEquals(teststr, s);
         }
         Assert.assertEquals(-1, instream.readLine(linebuf));
@@ -97,53 +104,52 @@ public class LineReaderInputStreamAdapto
         String teststr = "\n\n\r\n\r\r\n\n\n\n\n\n";
         byte[] raw = teststr.getBytes("US-ASCII");
 
-        LineReaderInputStreamAdaptor instream = new LineReaderInputStreamAdaptor(
-                new ByteArrayInputStream(raw));
+        LineReaderInputStreamAdaptor instream = create(raw);
 
         ByteArrayBuffer linebuf = new ByteArrayBuffer(8);
         linebuf.clear();
         instream.readLine(linebuf);
-        String s = new String(linebuf.toByteArray(), "US-ASCII");
+        String s = ContentUtil.toAsciiString(linebuf);
         Assert.assertEquals("\n", s);
 
         linebuf.clear();
         instream.readLine(linebuf);
-        s = new String(linebuf.toByteArray(), "US-ASCII");
+        s = ContentUtil.toAsciiString(linebuf);
         Assert.assertEquals("\n", s);
 
         linebuf.clear();
         instream.readLine(linebuf);
-        s = new String(linebuf.toByteArray(), "US-ASCII");
+        s = ContentUtil.toAsciiString(linebuf);
         Assert.assertEquals("\r\n", s);
 
         linebuf.clear();
         instream.readLine(linebuf);
-        s = new String(linebuf.toByteArray(), "US-ASCII");
+        s = ContentUtil.toAsciiString(linebuf);
         Assert.assertEquals("\r\r\n", s);
 
         linebuf.clear();
         instream.readLine(linebuf);
-        s = new String(linebuf.toByteArray(), "US-ASCII");
+        s = ContentUtil.toAsciiString(linebuf);
         Assert.assertEquals("\n", s);
 
         linebuf.clear();
         instream.readLine(linebuf);
-        s = new String(linebuf.toByteArray(), "US-ASCII");
+        s = ContentUtil.toAsciiString(linebuf);
         Assert.assertEquals("\n", s);
 
         linebuf.clear();
         instream.readLine(linebuf);
-        s = new String(linebuf.toByteArray(), "US-ASCII");
+        s = ContentUtil.toAsciiString(linebuf);
         Assert.assertEquals("\n", s);
 
         linebuf.clear();
         instream.readLine(linebuf);
-        s = new String(linebuf.toByteArray(), "US-ASCII");
+        s = ContentUtil.toAsciiString(linebuf);
         Assert.assertEquals("\n", s);
 
         linebuf.clear();
         instream.readLine(linebuf);
-        s = new String(linebuf.toByteArray(), "US-ASCII");
+        s = ContentUtil.toAsciiString(linebuf);
         Assert.assertEquals("\n", s);
 
         Assert.assertEquals(-1, instream.readLine(linebuf));
@@ -158,16 +164,14 @@ public class LineReaderInputStreamAdapto
         String teststr = "1234567890\r\n";
         byte[] raw = teststr.getBytes("US-ASCII");
 
-        LineReaderInputStreamAdaptor instream1 = new LineReaderInputStreamAdaptor(
-                new ByteArrayInputStream(raw), 13);
+        LineReaderInputStreamAdaptor instream1 = create(raw, 13);
         ByteArrayBuffer linebuf = new ByteArrayBuffer(8);
         linebuf.clear();
         instream1.readLine(linebuf);
 
         instream1.close();
 
-        LineReaderInputStreamAdaptor instream2 = new LineReaderInputStreamAdaptor(
-                new ByteArrayInputStream(raw), 12);
+        LineReaderInputStreamAdaptor instream2 = create(raw, 12);
         linebuf.clear();
         try {
             instream2.readLine(linebuf);