You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by gg...@apache.org on 2004/02/19 06:37:52 UTC
cvs commit: jakarta-commons/codec/src/java/org/apache/commons/codec/binary Binary.java
ggregory 2004/02/18 21:37:52
Modified: codec/src/java/org/apache/commons/codec/binary Binary.java
Log:
Organize Imports.
Revision Changes Path
1.2 +545 -545 jakarta-commons/codec/src/java/org/apache/commons/codec/binary/Binary.java
Index: Binary.java
===================================================================
RCS file: /home/cvs/jakarta-commons/codec/src/java/org/apache/commons/codec/binary/Binary.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Binary.java 22 Jan 2004 03:03:18 -0000 1.1
+++ Binary.java 19 Feb 2004 05:37:52 -0000 1.2
@@ -1,545 +1,545 @@
-/*
- * ====================================================================
- *
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2004 The Apache Software Foundation. All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- * if any, must include the following acknowledgement:
- * "This product includes software developed by the
- * Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowledgement may appear in the software itself,
- * if and wherever such third-party acknowledgements normally appear.
- *
- * 4. The names "Apache", "The Jakarta Project", "Commons", and "Apache Software
- * Foundation" must not be used to endorse or promote products derived
- * from this software without prior written permission. For written
- * permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- * nor may "Apache" appear in their name without prior
- * written permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation. For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- */
-package org.apache.commons.codec.binary ;
-
-import org.apache.commons.codec.BinaryDecoder ;
-import org.apache.commons.codec.BinaryEncoder ;
-import org.apache.commons.codec.DecoderException ;
-import org.apache.commons.codec.EncoderException ;
-
-/**
- * Encodes and decodes binary to and from ascii bit Strings.
- *
- * @todo may want to add more bit vector functions like and/or/xor/nand
- * @todo also might be good to generate boolean[] from byte[] et. cetera.
- * @author <a href="mailto:akarasulu@apache.org">Alex Karasulu</a>
- * @author $Author$
- * @version $Revision$
- */
-public class Binary implements BinaryDecoder, BinaryEncoder
-{
- /** mask for bit 0 of a byte */
- public static final int BIT_0 = 1 ;
- /** mask for bit 1 of a byte */
- public static final int BIT_1 = 1 << 1 ;
- /** mask for bit 2 of a byte */
- public static final int BIT_2 = 1 << 2 ;
- /** mask for bit 3 of a byte */
- public static final int BIT_3 = 1 << 3 ;
- /** mask for bit 4 of a byte */
- public static final int BIT_4 = 1 << 4 ;
- /** mask for bit 5 of a byte */
- public static final int BIT_5 = 1 << 5 ;
- /** mask for bit 6 of a byte */
- public static final int BIT_6 = 1 << 6 ;
- /** mask for bit 7 of a byte */
- public static final int BIT_7 = 1 << 7 ;
-
- public static final int [] BITS =
- {
- BIT_0, BIT_1, BIT_2, BIT_3, BIT_4, BIT_5, BIT_6, BIT_7
- } ;
-
-
- /**
- * Converts an array of raw binary data into an array of ascii 0 and 1
- * characters.
- *
- * @param raw the raw binary data to convert
- * @return 0 and 1 ascii character bytes one for each bit of the argument
- * @see org.apache.commons.codec.BinaryEncoder#encode(byte[])
- */
- public byte[] encode( byte[] raw )
- {
- return toAsciiBytes( raw ) ;
- }
-
-
- /**
- * Converts an array of raw binary data into an array of ascii 0 and 1
- * chars.
- *
- * @param raw the raw binary data to convert
- * @return 0 and 1 ascii character chars one for each bit of the argument
- * @throws EncoderException if the argument is not a byte[]
- * @see org.apache.commons.codec.Encoder#encode(java.lang.Object)
- */
- public Object encode( Object raw ) throws EncoderException
- {
- if ( ! ( raw instanceof byte [] ) )
- {
- throw new EncoderException( "argument not a byte array" ) ;
- }
-
- return toAsciiChars( ( byte [] ) raw ) ;
- }
-
-
- /**
- * Decodes a byte array where each byte represents an ascii '0' or '1'.
- *
- * @param ascii each byte represents an ascii '0' or '1'
- * @return the raw encoded binary where each bit corresponds to a byte in
- * the byte array argument
- * @throws DecoderException if argument is not a byte[], char[] or String
- * @see org.apache.commons.codec.Decoder#decode(java.lang.Object)
- */
- public Object decode( Object ascii ) throws DecoderException
- {
- if ( ascii instanceof byte[] )
- {
- return fromAscii( ( byte[] ) ascii ) ;
- }
-
- if ( ascii instanceof char[] )
- {
- return fromAscii( ( char[] ) ascii ) ;
- }
-
- if ( ascii instanceof String )
- {
- return fromAscii( ( ( String ) ascii ).toCharArray() ) ;
- }
-
- throw new DecoderException( "argument not a byte array" ) ;
- }
-
-
- /**
- * Decodes a byte array where each byte represents an ascii '0' or '1'.
- *
- * @param ascii each byte represents an ascii '0' or '1'
- * @return the raw encoded binary where each bit corresponds to a byte in
- * the byte array argument
- * @see org.apache.commons.codec.Decoder#decode(byte[])
- */
- public byte[] decode( byte[] ascii )
- {
- return fromAscii( ascii ) ;
- }
-
-
- /**
- * Decodes a String where each char of the String represents an ascii '0'
- * or '1'.
- *
- * @param ascii String of '0' and '1' characters
- * @return the raw encoded binary where each bit corresponds to a byte in
- * the byte array argument
- * @see org.apache.commons.codec.Decoder#decode(byte[])
- */
- public byte[] decode( String ascii )
- {
- return fromAscii( ascii.toCharArray() ) ;
- }
-
-
- /**
- * Decodes a byte array where each char represents an ascii '0' or '1'.
- *
- * @param ascii each char represents an ascii '0' or '1'
- * @return the raw encoded binary where each bit corresponds to a char in
- * the char array argument
- */
- public static byte[] fromAscii( char[] ascii )
- {
- // get length/8 times bytes with 3 bit shifts to the right of the length
- byte[] l_raw = new byte[ ascii.length >> 3 ] ;
-
- /*
- * Yah its long and repetitive but I unraveled an internal loop to
- * check each bit of a byte for speed using the bit masks that are
- * precomputed which is another PITA but it makes it faster.
- *
- * We also decr index jj by 8 as we go along to not recompute indices
- * using multiplication every time inside the loop.
- *
- * @todo might want another nested loop to use BITS[] now that its here
- */
- for ( int ii=0, jj=ascii.length-1; ii < l_raw.length; ii++, jj-=8 )
- {
- if ( ascii[jj] == '1' )
- {
- l_raw[ii] |= BIT_0 ;
- }
-
- if ( ascii[jj - 1] == '1' )
- {
- l_raw[ii] |= BIT_1 ;
- }
-
- if ( ascii[jj - 2] == '1' )
- {
- l_raw[ii] |= BIT_2 ;
- }
-
- if ( ascii[jj - 3] == '1' )
- {
- l_raw[ii] |= BIT_3 ;
- }
-
- if ( ascii[jj - 4] == '1' )
- {
- l_raw[ii] |= BIT_4 ;
- }
-
- if ( ascii[jj - 5] == '1' )
- {
- l_raw[ii] |= BIT_5 ;
- }
-
- if ( ascii[jj - 6] == '1' )
- {
- l_raw[ii] |= BIT_6 ;
- }
-
- if ( ascii[jj - 7] == '1' )
- {
- l_raw[ii] |= BIT_7 ;
- }
- }
-
- return l_raw ;
- }
-
-
- /**
- * Decodes a byte array where each byte represents an ascii '0' or '1'.
- *
- * @param ascii each byte represents an ascii '0' or '1'
- * @return the raw encoded binary where each bit corresponds to a byte in
- * the byte array argument
- */
- public static byte[] fromAscii( byte[] ascii )
- {
- // get length/8 times bytes with 3 bit shifts to the right of the length
- byte[] l_raw = new byte[ ascii.length >> 3 ] ;
-
- /*
- * Yah its long and repetitive but I unraveled an internal loop to
- * check each bit of a byte for speed using the bit masks that are
- * precomputed which is another PITA but it makes it faster.
- *
- * We also decr index jj by 8 as we go along to not recompute indices
- * using multiplication every time inside the loop.
- *
- * @todo might want another nested loop to use BITS[] now that its here
- */
- for ( int ii=0, jj=ascii.length-1; ii < l_raw.length; ii++, jj-=8 )
- {
- if ( ascii[jj] == '1' )
- {
- l_raw[ii] |= BIT_0 ;
- }
-
- if ( ascii[jj - 1] == '1' )
- {
- l_raw[ii] |= BIT_1 ;
- }
-
- if ( ascii[jj - 2] == '1' )
- {
- l_raw[ii] |= BIT_2 ;
- }
-
- if ( ascii[jj - 3] == '1' )
- {
- l_raw[ii] |= BIT_3 ;
- }
-
- if ( ascii[jj - 4] == '1' )
- {
- l_raw[ii] |= BIT_4 ;
- }
-
- if ( ascii[jj - 5] == '1' )
- {
- l_raw[ii] |= BIT_5 ;
- }
-
- if ( ascii[jj - 6] == '1' )
- {
- l_raw[ii] |= BIT_6 ;
- }
-
- if ( ascii[jj - 7] == '1' )
- {
- l_raw[ii] |= BIT_7 ;
- }
- }
-
- return l_raw ;
- }
-
-
- /**
- * Converts an array of raw binary data into an array of ascii 0 and 1
- * character bytes - each byte is a truncated char.
- *
- * @param raw the raw binary data to convert
- * @return an array of 0 and 1 character bytes for each bit of the argument
- * @see org.apache.commons.codec.BinaryEncoder#encode(byte[])
- */
- public static byte[] toAsciiBytes( byte[] raw )
- {
- // get 8 times the bytes with 3 bit shifts to the left of the length
- byte [] l_ascii = new byte[ raw.length << 3 ] ;
-
- /*
- * Yah its long and repetitive but I unraveled an internal loop to
- * check each bit of a byte for speed using the bit masks that are
- * precomputed which is another PITA but it makes it faster.
- *
- * We also decr index jj by 8 as we go along to not recompute indices
- * using multiplication every time inside the loop.
- *
- * @todo might want another nested loop to use BITS[] now that its here
- */
- for ( int ii=0, jj=l_ascii.length-1; ii < raw.length; ii++, jj-=8 )
- {
- if ( ( raw[ii] & BIT_0 ) == 0 )
- {
- l_ascii[jj] = '0' ;
- }
- else
- {
- l_ascii[jj] = '1' ;
- }
-
- if ( ( raw[ii] & BIT_1 ) == 0 )
- {
- l_ascii[jj - 1] = '0' ;
- }
- else
- {
- l_ascii[jj - 1] = '1' ;
- }
-
- if ( ( raw[ii] & BIT_2 ) == 0 )
- {
- l_ascii[jj - 2] = '0' ;
- }
- else
- {
- l_ascii[jj - 2] = '1' ;
- }
-
- if ( ( raw[ii] & BIT_3 ) == 0 )
- {
- l_ascii[jj - 3] = '0' ;
- }
- else
- {
- l_ascii[jj - 3] = '1' ;
- }
-
- if ( ( raw[ii] & BIT_4 ) == 0 )
- {
- l_ascii[jj - 4] = '0' ;
- }
- else
- {
- l_ascii[jj - 4] = '1' ;
- }
-
- if ( ( raw[ii] & BIT_5 ) == 0 )
- {
- l_ascii[jj - 5] = '0' ;
- }
- else
- {
- l_ascii[jj - 5] = '1' ;
- }
-
- if ( ( raw[ii] & BIT_6 ) == 0 )
- {
- l_ascii[jj - 6] = '0' ;
- }
- else
- {
- l_ascii[jj - 6] = '1' ;
- }
-
- if ( ( raw[ii] & BIT_7 ) == 0 )
- {
- l_ascii[jj - 7] = '0' ;
- }
- else
- {
- l_ascii[jj - 7] = '1' ;
- }
- }
-
- return l_ascii ;
- }
-
-
- /**
- * Converts an array of raw binary data into an array of ascii 0 and 1
- * characters.
- *
- * @param raw the raw binary data to convert
- * @return an array of 0 and 1 characters for each bit of the argument
- * @see org.apache.commons.codec.BinaryEncoder#encode(byte[])
- */
- public static char[] toAsciiChars( byte[] raw )
- {
- // get 8 times the bytes with 3 bit shifts to the left of the length
- char [] l_ascii = new char[ raw.length << 3 ] ;
-
- /*
- * Yah its long and repetitive but I unraveled an internal loop to
- * check each bit of a byte for speed using the bit masks that are
- * precomputed which is another PITA but it makes it faster.
- *
- * We also grow index jj by 8 as we go along to not recompute indices
- * using multiplication every time inside the loop.
- *
- * @todo might want another nested loop to use BITS[] now that its here
- */
- for ( int ii=0, jj=l_ascii.length-1; ii < raw.length; ii++, jj-=8 )
- {
- if ( ( raw[ii] & BIT_0 ) == 0 )
- {
- l_ascii[jj] = '0' ;
- }
- else
- {
- l_ascii[jj] = '1' ;
- }
-
- if ( ( raw[ii] & BIT_1 ) == 0 )
- {
- l_ascii[jj - 1] = '0' ;
- }
- else
- {
- l_ascii[jj - 1] = '1' ;
- }
-
- if ( ( raw[ii] & BIT_2 ) == 0 )
- {
- l_ascii[jj - 2] = '0' ;
- }
- else
- {
- l_ascii[jj - 2] = '1' ;
- }
-
- if ( ( raw[ii] & BIT_3 ) == 0 )
- {
- l_ascii[jj - 3] = '0' ;
- }
- else
- {
- l_ascii[jj - 3] = '1' ;
- }
-
- if ( ( raw[ii] & BIT_4 ) == 0 )
- {
- l_ascii[jj - 4] = '0' ;
- }
- else
- {
- l_ascii[jj - 4] = '1' ;
- }
-
- if ( ( raw[ii] & BIT_5 ) == 0 )
- {
- l_ascii[jj - 5] = '0' ;
- }
- else
- {
- l_ascii[jj - 5] = '1' ;
- }
-
- if ( ( raw[ii] & BIT_6 ) == 0 )
- {
- l_ascii[jj - 6] = '0' ;
- }
- else
- {
- l_ascii[jj - 6] = '1' ;
- }
-
- if ( ( raw[ii] & BIT_7 ) == 0 )
- {
- l_ascii[jj - 7] = '0' ;
- }
- else
- {
- l_ascii[jj - 7] = '1' ;
- }
- }
-
- return l_ascii ;
- }
-
-
- /**
- * Converts an array of raw binary data into a String of ascii 0 and 1
- * characters.
- *
- * @param raw the raw binary data to convert
- * @return a String of 0 and 1 characters representing the binary data
- * @see org.apache.commons.codec.BinaryEncoder#encode(byte[])
- */
- public static String toAsciiString( byte[] raw )
- {
- return new String( toAsciiChars( raw ) ) ;
- }
-}
+/*
+ * ====================================================================
+ *
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2001-2004 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ * if any, must include the following acknowledgement:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgement may appear in the software itself,
+ * if and wherever such third-party acknowledgements normally appear.
+ *
+ * 4. The names "Apache", "The Jakarta Project", "Commons", and "Apache Software
+ * Foundation" must not be used to endorse or promote products derived
+ * from this software without prior written permission. For written
+ * permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache"
+ * nor may "Apache" appear in their name without prior
+ * written permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
+package org.apache.commons.codec.binary ;
+
+import org.apache.commons.codec.BinaryDecoder;
+import org.apache.commons.codec.BinaryEncoder;
+import org.apache.commons.codec.DecoderException;
+import org.apache.commons.codec.EncoderException;
+
+/**
+ * Encodes and decodes binary to and from ascii bit Strings.
+ *
+ * @todo may want to add more bit vector functions like and/or/xor/nand
+ * @todo also might be good to generate boolean[] from byte[] et. cetera.
+ * @author <a href="mailto:akarasulu@apache.org">Alex Karasulu</a>
+ * @author $Author$
+ * @version $Revision$
+ */
+public class Binary implements BinaryDecoder, BinaryEncoder
+{
+ /** mask for bit 0 of a byte */
+ public static final int BIT_0 = 1 ;
+ /** mask for bit 1 of a byte */
+ public static final int BIT_1 = 1 << 1 ;
+ /** mask for bit 2 of a byte */
+ public static final int BIT_2 = 1 << 2 ;
+ /** mask for bit 3 of a byte */
+ public static final int BIT_3 = 1 << 3 ;
+ /** mask for bit 4 of a byte */
+ public static final int BIT_4 = 1 << 4 ;
+ /** mask for bit 5 of a byte */
+ public static final int BIT_5 = 1 << 5 ;
+ /** mask for bit 6 of a byte */
+ public static final int BIT_6 = 1 << 6 ;
+ /** mask for bit 7 of a byte */
+ public static final int BIT_7 = 1 << 7 ;
+
+ public static final int [] BITS =
+ {
+ BIT_0, BIT_1, BIT_2, BIT_3, BIT_4, BIT_5, BIT_6, BIT_7
+ } ;
+
+
+ /**
+ * Converts an array of raw binary data into an array of ascii 0 and 1
+ * characters.
+ *
+ * @param raw the raw binary data to convert
+ * @return 0 and 1 ascii character bytes one for each bit of the argument
+ * @see org.apache.commons.codec.BinaryEncoder#encode(byte[])
+ */
+ public byte[] encode( byte[] raw )
+ {
+ return toAsciiBytes( raw ) ;
+ }
+
+
+ /**
+ * Converts an array of raw binary data into an array of ascii 0 and 1
+ * chars.
+ *
+ * @param raw the raw binary data to convert
+ * @return 0 and 1 ascii character chars one for each bit of the argument
+ * @throws EncoderException if the argument is not a byte[]
+ * @see org.apache.commons.codec.Encoder#encode(java.lang.Object)
+ */
+ public Object encode( Object raw ) throws EncoderException
+ {
+ if ( ! ( raw instanceof byte [] ) )
+ {
+ throw new EncoderException( "argument not a byte array" ) ;
+ }
+
+ return toAsciiChars( ( byte [] ) raw ) ;
+ }
+
+
+ /**
+ * Decodes a byte array where each byte represents an ascii '0' or '1'.
+ *
+ * @param ascii each byte represents an ascii '0' or '1'
+ * @return the raw encoded binary where each bit corresponds to a byte in
+ * the byte array argument
+ * @throws DecoderException if argument is not a byte[], char[] or String
+ * @see org.apache.commons.codec.Decoder#decode(java.lang.Object)
+ */
+ public Object decode( Object ascii ) throws DecoderException
+ {
+ if ( ascii instanceof byte[] )
+ {
+ return fromAscii( ( byte[] ) ascii ) ;
+ }
+
+ if ( ascii instanceof char[] )
+ {
+ return fromAscii( ( char[] ) ascii ) ;
+ }
+
+ if ( ascii instanceof String )
+ {
+ return fromAscii( ( ( String ) ascii ).toCharArray() ) ;
+ }
+
+ throw new DecoderException( "argument not a byte array" ) ;
+ }
+
+
+ /**
+ * Decodes a byte array where each byte represents an ascii '0' or '1'.
+ *
+ * @param ascii each byte represents an ascii '0' or '1'
+ * @return the raw encoded binary where each bit corresponds to a byte in
+ * the byte array argument
+ * @see org.apache.commons.codec.Decoder#decode(byte[])
+ */
+ public byte[] decode( byte[] ascii )
+ {
+ return fromAscii( ascii ) ;
+ }
+
+
+ /**
+ * Decodes a String where each char of the String represents an ascii '0'
+ * or '1'.
+ *
+ * @param ascii String of '0' and '1' characters
+ * @return the raw encoded binary where each bit corresponds to a byte in
+ * the byte array argument
+ * @see org.apache.commons.codec.Decoder#decode(byte[])
+ */
+ public byte[] decode( String ascii )
+ {
+ return fromAscii( ascii.toCharArray() ) ;
+ }
+
+
+ /**
+ * Decodes a byte array where each char represents an ascii '0' or '1'.
+ *
+ * @param ascii each char represents an ascii '0' or '1'
+ * @return the raw encoded binary where each bit corresponds to a char in
+ * the char array argument
+ */
+ public static byte[] fromAscii( char[] ascii )
+ {
+ // get length/8 times bytes with 3 bit shifts to the right of the length
+ byte[] l_raw = new byte[ ascii.length >> 3 ] ;
+
+ /*
+ * Yah its long and repetitive but I unraveled an internal loop to
+ * check each bit of a byte for speed using the bit masks that are
+ * precomputed which is another PITA but it makes it faster.
+ *
+ * We also decr index jj by 8 as we go along to not recompute indices
+ * using multiplication every time inside the loop.
+ *
+ * @todo might want another nested loop to use BITS[] now that its here
+ */
+ for ( int ii=0, jj=ascii.length-1; ii < l_raw.length; ii++, jj-=8 )
+ {
+ if ( ascii[jj] == '1' )
+ {
+ l_raw[ii] |= BIT_0 ;
+ }
+
+ if ( ascii[jj - 1] == '1' )
+ {
+ l_raw[ii] |= BIT_1 ;
+ }
+
+ if ( ascii[jj - 2] == '1' )
+ {
+ l_raw[ii] |= BIT_2 ;
+ }
+
+ if ( ascii[jj - 3] == '1' )
+ {
+ l_raw[ii] |= BIT_3 ;
+ }
+
+ if ( ascii[jj - 4] == '1' )
+ {
+ l_raw[ii] |= BIT_4 ;
+ }
+
+ if ( ascii[jj - 5] == '1' )
+ {
+ l_raw[ii] |= BIT_5 ;
+ }
+
+ if ( ascii[jj - 6] == '1' )
+ {
+ l_raw[ii] |= BIT_6 ;
+ }
+
+ if ( ascii[jj - 7] == '1' )
+ {
+ l_raw[ii] |= BIT_7 ;
+ }
+ }
+
+ return l_raw ;
+ }
+
+
+ /**
+ * Decodes a byte array where each byte represents an ascii '0' or '1'.
+ *
+ * @param ascii each byte represents an ascii '0' or '1'
+ * @return the raw encoded binary where each bit corresponds to a byte in
+ * the byte array argument
+ */
+ public static byte[] fromAscii( byte[] ascii )
+ {
+ // get length/8 times bytes with 3 bit shifts to the right of the length
+ byte[] l_raw = new byte[ ascii.length >> 3 ] ;
+
+ /*
+ * Yah its long and repetitive but I unraveled an internal loop to
+ * check each bit of a byte for speed using the bit masks that are
+ * precomputed which is another PITA but it makes it faster.
+ *
+ * We also decr index jj by 8 as we go along to not recompute indices
+ * using multiplication every time inside the loop.
+ *
+ * @todo might want another nested loop to use BITS[] now that its here
+ */
+ for ( int ii=0, jj=ascii.length-1; ii < l_raw.length; ii++, jj-=8 )
+ {
+ if ( ascii[jj] == '1' )
+ {
+ l_raw[ii] |= BIT_0 ;
+ }
+
+ if ( ascii[jj - 1] == '1' )
+ {
+ l_raw[ii] |= BIT_1 ;
+ }
+
+ if ( ascii[jj - 2] == '1' )
+ {
+ l_raw[ii] |= BIT_2 ;
+ }
+
+ if ( ascii[jj - 3] == '1' )
+ {
+ l_raw[ii] |= BIT_3 ;
+ }
+
+ if ( ascii[jj - 4] == '1' )
+ {
+ l_raw[ii] |= BIT_4 ;
+ }
+
+ if ( ascii[jj - 5] == '1' )
+ {
+ l_raw[ii] |= BIT_5 ;
+ }
+
+ if ( ascii[jj - 6] == '1' )
+ {
+ l_raw[ii] |= BIT_6 ;
+ }
+
+ if ( ascii[jj - 7] == '1' )
+ {
+ l_raw[ii] |= BIT_7 ;
+ }
+ }
+
+ return l_raw ;
+ }
+
+
+ /**
+ * Converts an array of raw binary data into an array of ascii 0 and 1
+ * character bytes - each byte is a truncated char.
+ *
+ * @param raw the raw binary data to convert
+ * @return an array of 0 and 1 character bytes for each bit of the argument
+ * @see org.apache.commons.codec.BinaryEncoder#encode(byte[])
+ */
+ public static byte[] toAsciiBytes( byte[] raw )
+ {
+ // get 8 times the bytes with 3 bit shifts to the left of the length
+ byte [] l_ascii = new byte[ raw.length << 3 ] ;
+
+ /*
+ * Yah its long and repetitive but I unraveled an internal loop to
+ * check each bit of a byte for speed using the bit masks that are
+ * precomputed which is another PITA but it makes it faster.
+ *
+ * We also decr index jj by 8 as we go along to not recompute indices
+ * using multiplication every time inside the loop.
+ *
+ * @todo might want another nested loop to use BITS[] now that its here
+ */
+ for ( int ii=0, jj=l_ascii.length-1; ii < raw.length; ii++, jj-=8 )
+ {
+ if ( ( raw[ii] & BIT_0 ) == 0 )
+ {
+ l_ascii[jj] = '0' ;
+ }
+ else
+ {
+ l_ascii[jj] = '1' ;
+ }
+
+ if ( ( raw[ii] & BIT_1 ) == 0 )
+ {
+ l_ascii[jj - 1] = '0' ;
+ }
+ else
+ {
+ l_ascii[jj - 1] = '1' ;
+ }
+
+ if ( ( raw[ii] & BIT_2 ) == 0 )
+ {
+ l_ascii[jj - 2] = '0' ;
+ }
+ else
+ {
+ l_ascii[jj - 2] = '1' ;
+ }
+
+ if ( ( raw[ii] & BIT_3 ) == 0 )
+ {
+ l_ascii[jj - 3] = '0' ;
+ }
+ else
+ {
+ l_ascii[jj - 3] = '1' ;
+ }
+
+ if ( ( raw[ii] & BIT_4 ) == 0 )
+ {
+ l_ascii[jj - 4] = '0' ;
+ }
+ else
+ {
+ l_ascii[jj - 4] = '1' ;
+ }
+
+ if ( ( raw[ii] & BIT_5 ) == 0 )
+ {
+ l_ascii[jj - 5] = '0' ;
+ }
+ else
+ {
+ l_ascii[jj - 5] = '1' ;
+ }
+
+ if ( ( raw[ii] & BIT_6 ) == 0 )
+ {
+ l_ascii[jj - 6] = '0' ;
+ }
+ else
+ {
+ l_ascii[jj - 6] = '1' ;
+ }
+
+ if ( ( raw[ii] & BIT_7 ) == 0 )
+ {
+ l_ascii[jj - 7] = '0' ;
+ }
+ else
+ {
+ l_ascii[jj - 7] = '1' ;
+ }
+ }
+
+ return l_ascii ;
+ }
+
+
+ /**
+ * Converts an array of raw binary data into an array of ascii 0 and 1
+ * characters.
+ *
+ * @param raw the raw binary data to convert
+ * @return an array of 0 and 1 characters for each bit of the argument
+ * @see org.apache.commons.codec.BinaryEncoder#encode(byte[])
+ */
+ public static char[] toAsciiChars( byte[] raw )
+ {
+ // get 8 times the bytes with 3 bit shifts to the left of the length
+ char [] l_ascii = new char[ raw.length << 3 ] ;
+
+ /*
+ * Yah its long and repetitive but I unraveled an internal loop to
+ * check each bit of a byte for speed using the bit masks that are
+ * precomputed which is another PITA but it makes it faster.
+ *
+ * We also grow index jj by 8 as we go along to not recompute indices
+ * using multiplication every time inside the loop.
+ *
+ * @todo might want another nested loop to use BITS[] now that its here
+ */
+ for ( int ii=0, jj=l_ascii.length-1; ii < raw.length; ii++, jj-=8 )
+ {
+ if ( ( raw[ii] & BIT_0 ) == 0 )
+ {
+ l_ascii[jj] = '0' ;
+ }
+ else
+ {
+ l_ascii[jj] = '1' ;
+ }
+
+ if ( ( raw[ii] & BIT_1 ) == 0 )
+ {
+ l_ascii[jj - 1] = '0' ;
+ }
+ else
+ {
+ l_ascii[jj - 1] = '1' ;
+ }
+
+ if ( ( raw[ii] & BIT_2 ) == 0 )
+ {
+ l_ascii[jj - 2] = '0' ;
+ }
+ else
+ {
+ l_ascii[jj - 2] = '1' ;
+ }
+
+ if ( ( raw[ii] & BIT_3 ) == 0 )
+ {
+ l_ascii[jj - 3] = '0' ;
+ }
+ else
+ {
+ l_ascii[jj - 3] = '1' ;
+ }
+
+ if ( ( raw[ii] & BIT_4 ) == 0 )
+ {
+ l_ascii[jj - 4] = '0' ;
+ }
+ else
+ {
+ l_ascii[jj - 4] = '1' ;
+ }
+
+ if ( ( raw[ii] & BIT_5 ) == 0 )
+ {
+ l_ascii[jj - 5] = '0' ;
+ }
+ else
+ {
+ l_ascii[jj - 5] = '1' ;
+ }
+
+ if ( ( raw[ii] & BIT_6 ) == 0 )
+ {
+ l_ascii[jj - 6] = '0' ;
+ }
+ else
+ {
+ l_ascii[jj - 6] = '1' ;
+ }
+
+ if ( ( raw[ii] & BIT_7 ) == 0 )
+ {
+ l_ascii[jj - 7] = '0' ;
+ }
+ else
+ {
+ l_ascii[jj - 7] = '1' ;
+ }
+ }
+
+ return l_ascii ;
+ }
+
+
+ /**
+ * Converts an array of raw binary data into a String of ascii 0 and 1
+ * characters.
+ *
+ * @param raw the raw binary data to convert
+ * @return a String of 0 and 1 characters representing the binary data
+ * @see org.apache.commons.codec.BinaryEncoder#encode(byte[])
+ */
+ public static String toAsciiString( byte[] raw )
+ {
+ return new String( toAsciiChars( raw ) ) ;
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org