Review/comment needed for the new public java.util.Base64 class
Xueming Shen
xueming.shen at oracle.com
Thu Oct 11 16:40:42 UTC 2012
On 10/11/2012 02:43 AM, Stephen Colebourne wrote:
> The class level javadoc is quite short. It also has hyperlinks in the
> first sentence, which means that they are visible in package level
> javadoc. Consider having no hyperlinks in the first sentence, and
> expanding a little on what base 64 is.
>
Sure, will come up something longer.
> There are lots of other public base 64 implementations to test/check against.
> http://commons.apache.org/net/api-3.1/org/apache/commons/net/util/Base64.html
> http://www.cs.berkeley.edu/~jonah/bc/org/bouncycastle/util/encoders/Base64.html
> http://migbase64.sourceforge.net/ (claims to be fast)
I did compare the result against the apache version, the difference
appears to
be the apache (1)append line feeds at the end of the encoded bytes
(2)skip the
padding '=' characters for URL-safe style. Will try other implementations.
> The arrays are defined inconsistently within the code (3 styles).
> private Encoder(byte[] base64, byte[] newline, int linemax)
> byte [] getBytes(ByteBuffer bb)
> private static final byte toBase64[] =
> I'd strongly encourage one style be used, and that it is the first of
> the three above.
Good catch, the later two are not intentional, the leftover of old code.
webrev has
been updated according.
Thanks!
-Sherman
> Stephen
>
>
> On 10 October 2012 18:54, Xueming Shen<xueming.shen at oracle.com> wrote:
>> A standard/public API for Base64 encoding and decoding has been long
>> overdue. JDK8 has a JEP [1] for this particular request.
>>
>> Here is the draft proposal to add a public Base64 utility class for JDK8.
>>
>> http://cr.openjdk.java.net/~sherman/4235519/webrev
>>
>> This class basically provides 4 variants of Base64 encoding scheme,
>>
>> (1) the default RFC 4648, which uses standard mapping, no line breaks,
>> (2) the URL-safe RFE 4648, no line breaks, use "-" and "_" to replace "+"
>> and
>> "/" for the mapping
>> (3) the default MIME style, as in RFC 2045 (and its earlier versions), which
>> uses
>> "standard" base64 mapping, a 76 characters per line limit and uses crlf
>> pair
>> \r\n for line break.
>> (4) an extend-able MIME base64, with the char-per-line and the line
>> separator(s)
>> specified by developer.
>>
>> The encoder/decoder now provides encoding and decoding for byte[], String,
>> ByteBuffer and a pair of "EncoderInputStream" and "DecoderOutputStrream",
>> which we believe/hope should satisfy most of the common use cases.
>> Additional
>> method(s) can be added if strongly desired.
>>
>> We tried couple slightly different styles of design for such this "simple"
>> utility
>> class [2]. We kinda concluded that the version proposed probably provides
>> the best balance among readability, usability and extensibility.
>>
>> Please help review and comment on the API and implementation.
>>
>> Thanks!
>> -Sherman
>>
>> [1] http://openjdk.java.net/jeps/135
>> [2] http://cr.openjdk.java.net/~sherman/base64/
More information about the core-libs-dev
mailing list