Hi,

I know of a good Base64InputStream for commons-codec.  It can encode
and decode.  It uses the Base64 class from commons-codec under the
hood.   It works like this:

-------------------------------------------
final boolean DECODE = true;
final boolean ENCODE = false;

InputStream in = new FileInputStream("file.base64");
in = new Base64InputStream(in, DECODE);
-------------------------------------------

I ran some performance tests (decode 699MB file) against some other
Base64 implementations:

1. [60.507 seconds] http://iharder.sourceforge.net/base64/

2. [69.311 seconds] sun.misc.BASE64Decoder

3. [31.018 seconds] "openssl enc -base64 -d" (non-java unix command)

4. [30.865 seconds] not-yet-commons-ssl   THE WINNER!!!!

- Core 2 Duo 2.8ghz on Mac Leopard
- Sun's 1.5.0_13 with "-server"
- Full 700MB was decoded three times in a single go (no JVM restarts).
 The shortest time for each is printed above.
- Files created by the 4 techniques compared using md5sum.  All look same.
- BufferedInputStream and BufferedOutputStream wrappers.
- (If I may brag:  not-yet-commons-ssl performance doesn't change if
BufferedInputStream / BufferedOutputStream aren't used.  The other
libraries really suffer - like 20 times slower!)

I also tried to test with ws-common, but the Base64 library in there
doesn't have a streaming decoder, so I don't think it can handle a
700MB file.


Here's the code:
http://juliusdavies.ca/svn/viewvc.cgi/not-yet-commons-ssl/trunk/src/java/org/apache/commons/ssl/Base64InputStream.java?view=markup


I should mention one thing.... a huge IO bottleneck was fixed in
not-yet-commons-ssl by doing this:

byte[] line = readLine.nextAsBytes(100);

ReadLine is a special byte[] oriented line-reader.  In this case I'm
telling it "give me next 100 lines as byte[] if possible, with
line-endings stripped off."  If the commons-codec project is
interested in something like this, I think ReadLine has to come along,
too.


By the way, I'm just querying the mailing list here for interest.  The
Base64InputStream.java code in not-yet-commons-ssl needs javadocs
before it can come over.



And.... good work on org.apache.commons.codec.binary.Base64!  I was
really astonished to see us beat openssl!



-- 
yours,

Julius Davies
250-592-2284 (Home)
250-893-4579 (Mobile)
http://juliusdavies.ca/

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to