Mega Code Archive

 
Categories / Java / Language Basics
 

Utility for byte swapping of all java data types

/*  * (C) 2004 - Geotechnical Software Services  *   * This code is free software; you can redistribute it and/or  * modify it under the terms of the GNU Lesser General Public   * License as published by the Free Software Foundation; either   * version 2.1 of the License, or (at your option) any later version.  *  * This code is distributed in the hope that it will be useful,  * but WITHOUT ANY WARRANTY; without even the implied warranty of  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the  * GNU Lesser General Public License for more details.  *  * You should have received a copy of the GNU Lesser General Public   * License along with this program; if not, write to the Free   * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,   * MA  02111-1307, USA.  */ //package no.geosoft.cc.util; /**  * Utility class for doing byte swapping (i.e. conversion between  * little-endian and big-endian representations) of different data types.  * Byte swapping is typically used when data is read from a stream   * delivered by a system of different endian type as the present one.  *   * @author <a href="mailto:jacob.dreyer@geosoft.no">Jacob Dreyer</a>  */    public class ByteSwapper {   /**    * Byte swap a single short value.    *     * @param value  Value to byte swap.    * @return       Byte swapped representation.    */   public static short swap (short value)   {     int b1 = value & 0xff;     int b2 = (value >> 8) & 0xff;     return (short) (b1 << 8 | b2 << 0);   }      /**    * Byte swap a single int value.    *     * @param value  Value to byte swap.    * @return       Byte swapped representation.    */   public static int swap (int value)   {     int b1 = (value >>  0) & 0xff;     int b2 = (value >>  8) & 0xff;     int b3 = (value >> 16) & 0xff;     int b4 = (value >> 24) & 0xff;     return b1 << 24 | b2 << 16 | b3 << 8 | b4 << 0;   }      /**    * Byte swap a single long value.    *     * @param value  Value to byte swap.    * @return       Byte swapped representation.    */   public static long swap (long value)   {     long b1 = (value >>  0) & 0xff;     long b2 = (value >>  8) & 0xff;     long b3 = (value >> 16) & 0xff;     long b4 = (value >> 24) & 0xff;     long b5 = (value >> 32) & 0xff;     long b6 = (value >> 40) & 0xff;     long b7 = (value >> 48) & 0xff;     long b8 = (value >> 56) & 0xff;     return b1 << 56 | b2 << 48 | b3 << 40 | b4 << 32 |            b5 << 24 | b6 << 16 | b7 <<  8 | b8 <<  0;   }         /**    * Byte swap a single float value.    *     * @param value  Value to byte swap.    * @return       Byte swapped representation.    */   public static float swap (float value)   {     int intValue = Float.floatToIntBits (value);     intValue = swap (intValue);     return Float.intBitsToFloat (intValue);   }      /**    * Byte swap a single double value.    *     * @param value  Value to byte swap.    * @return       Byte swapped representation.    */   public static double swap (double value)   {     long longValue = Double.doubleToLongBits (value);     longValue = swap (longValue);     return Double.longBitsToDouble (longValue);   }      /**    * Byte swap an array of shorts. The result of the swapping    * is put back into the specified array.    *    * @param array  Array of values to swap    */   public static void swap (short[] array)   {     for (int i = 0; i < array.length; i++)       array[i] = swap (array[i]);   }         /**    * Byte swap an array of ints. The result of the swapping    * is put back into the specified array.    *     * @param array  Array of values to swap    */   public static void swap (int[] array)   {     for (int i = 0; i < array.length; i++)       array[i] = swap (array[i]);   }      /**    * Byte swap an array of longs. The result of the swapping    * is put back into the specified array.    *     * @param array  Array of values to swap    */   public static void swap (long[] array)   {     for (int i = 0; i < array.length; i++)       array[i] = swap (array[i]);   }      /**    * Byte swap an array of floats. The result of the swapping    * is put back into the specified array.    *     * @param array  Array of values to swap    */   public static void swap (float[] array)   {     for (int i = 0; i < array.length; i++)       array[i] = swap (array[i]);   }      /**    * Byte swap an array of doubles. The result of the swapping    * is put back into the specified array.    *     * @param array  Array of values to swap    */   public static void swap (double[] array)   {     for (int i = 0; i < array.length; i++)       array[i] = swap (array[i]);   } }