File Input Output Java

import java.io.UnsupportedEncodingException;
/**
 * 

Byte-Array Conversion Utility Functions.


 *
 * $Id: ByteUtils.java,v 1.6 2005/06/16 19:58:58 mokhov Exp $
 *
 * @version $Revision: 1.6 $
 * @author Serguei Mokhov
 * @since 0.3.0
 */
public class ByteUtils
{
  /**
   * Allow derivatives.
   */
  protected ByteUtils()
  {
  }
  /**
   * Converts a byte array to short value.
   * Equivalent to byteArrayToShort(paRawBytes, 0, pbBigEndian);
   *
   * @param paRawBytes the byte array
   * @param pbBigEndian true if the bytes are in Big-endian order; false otherwise
   *
   * @return short representation of the bytes
   */
  public static short byteArrayToShort(byte[] paRawBytes, boolean pbBigEndian)
  {
    return byteArrayToShort(paRawBytes, 0, pbBigEndian);
  }
  /**
   * Converts a portion of a byte array with given offset to short value.
   *
   * @param paRawBytes the byte array
   * @param piOffset offset in the original array to start reading bytes from
   * @param pbBigEndian true if the bytes are in Big-endian order; false otherwise
   *
   * @return short representation of the bytes
   */
  public static short byteArrayToShort(byte[] paRawBytes, int piOffset, boolean pbBigEndian)
  {
    int iRetVal = -1;
    // TODO: revisit this: should we silently add missing byte and should
    // we ingnore excessing bytes?
    if(paRawBytes.length < piOffset + 2)
      return -1;
    int iLow;
    int iHigh;
    if(pbBigEndian)
    {
      iLow  = paRawBytes[piOffset + 1];
      iHigh = paRawBytes[piOffset + 0];
    }
    else
    {
      iLow  = paRawBytes[piOffset + 0];
      iHigh = paRawBytes[piOffset + 1];
    }
    // Merge high-order and low-order byte to form a 16-bit double value.
    iRetVal = (iHigh << 8) | (0xFF & iLow);
    return (short)iRetVal;
  }
  /**
   * Converts a byte array to int value.
   * Equivalent to intArrayToShort(paRawBytes, 0, pbBigEndian);
   *
   * @param paRawBytes the byte array
   * @param pbBigEndian true if the bytes are in Big-endian order; false otherwise
   *
   * @return int representation of the bytes
   */
  public static int byteArrayToInt(byte[] paRawBytes, boolean pbBigEndian)
  {
    return byteArrayToInt(paRawBytes, 0, pbBigEndian);
  }
  /**
   * Converts a portion of a byte array with given offset to int value.
   *
   * @param paRawBytes the byte array
   * @param piOffset offset in the original array to start reading bytes from
   * @param pbBigEndian true if the bytes are in Big-endian order; false otherwise
   *
   * @return int representation of the bytes
   */
  public static int byteArrayToInt(byte[] paRawBytes, int piOffset, boolean pbBigEndian)
  {
    int iRetVal = -1;
    if(paRawBytes.length < piOffset + 4)
      return iRetVal;
    int iLowest;
    int iLow;
    int iMid;
    int iHigh;
    if(pbBigEndian)
    {
      iLowest = paRawBytes[piOffset + 3];
      iLow    = paRawBytes[piOffset + 2];
      iMid    = paRawBytes[piOffset + 1];
      iHigh   = paRawBytes[piOffset + 0];
    }
    else
    {
      iLowest = paRawBytes[piOffset + 0];
      iLow    = paRawBytes[piOffset + 1];
      iMid    = paRawBytes[piOffset + 2];
      iHigh   = paRawBytes[piOffset + 3];
    }
    // Merge four bytes to form a 32-bit int value.
    iRetVal = (iHigh << 24) | (iMid << 16) | (iLow << 8) | (0xFF & iLowest);
    return iRetVal;
  }
  /**
   * Converts an int value to a byte array.
   *
   * @param piValueToConvert the original integer
   * @param pbBigEndian true if the bytes are in Big-endian order; false otherwise
   *
   * @return byte[] representation of the int
   */
  public static byte[] intToByteArray(int piValueToConvert, boolean pbBigEndian)
  {
    byte[] aRetVal = new byte[4];
    byte iLowest;
    byte iLow;
    byte iMid;
    byte iHigh;
    iLowest = (byte)(piValueToConvert & 0xFF);
    iLow    = (byte)((piValueToConvert >> 8) & 0xFF);
    iMid    = (byte)((piValueToConvert >> 16) & 0xFF);
    iHigh   = (byte)((piValueToConvert >> 24) & 0xFF);
    if(pbBigEndian)
    {
      aRetVal[3] = iLowest;
      aRetVal[2] = iLow;
      aRetVal[1] = iMid;
      aRetVal[0] = iHigh;
    }
    else
    {
      aRetVal[0] = iLowest;
      aRetVal[1] = iLow;
      aRetVal[2] = iMid;
      aRetVal[3] = iHigh;
    }
    return aRetVal;
  }
  /**
   * Converts a byte array to String value.
   * Cleans up non-word characters along the way.
   *
   * Equivalent to byteArrayToString(paRawBytes, 0, paRawBytes.length);
   *
   * @param paRawBytes the byte array, non-UNICODE
   *
   * @return UNICODE String representation of the bytes
   */
  public static String byteArrayToString(byte[] paRawBytes)
  {
    return byteArrayToString(paRawBytes, 0, paRawBytes.length);
  }
  /**
   * Converts a portion of a byte array to String value.
   * Cleans up non-word characters along the way.
   *
   * @param paRawBytes the byte array, non-UNICODE
   * @param piOffset offset in the original array to start reading bytes from
   * @param piLength how many bytes of the array paramter to interpret as String
   *
   * @return UNICODE String representation of the bytes with trailing garbage stripped;
   *         "" if array length is less than piOffset + piLength;
   *         "" if the generatied string begins with garbage
   */
  public static String byteArrayToString(byte[] paRawBytes, int piOffset, int piLength)
  {
    if(paRawBytes.length < piOffset + piLength)
      return "";
    String oBeautifulString = new String(paRawBytes, piOffset, piLength);
    int i = 0;
    if(oBeautifulString.matches("^\\W") == true)
      oBeautifulString = "";
    else
    {
      for(i = piOffset; i < piOffset + piLength; i++)
      {
        if(paRawBytes[i] < 32 || paRawBytes[i] > 128)
          break;
      }
      oBeautifulString = oBeautifulString.substring(0, i - piOffset);
    }
    return oBeautifulString;
  }
  /**
   * Converts a String value to a byte array in US-ASCII charset.
   *
   * Equivalent to stringToByteArray(pstrStringToConvert, "US-ASCII");
   *
   * @param pstrStringToConvert the original string
   *
   * @return null-terminated byte[] representation of the String
   */
  public static byte[] stringToByteArray(String pstrStringToConvert)
  {
    return stringToByteArray(pstrStringToConvert, "US-ASCII");
  }
  /**
   * Attempts to convert a String value to a byte array in specified charset.
   * If the charset is invalid, returns plain byte-representation of the host environment.
   *
   * @param pstrStringToConvert the original string
   * @param pstrCharSet characted set to assume for the original string
   *
   * @return null-terminated byte[] representation of the String
   */
  public static byte[] stringToByteArray(String pstrStringToConvert, String pstrCharSet)
  {
    byte[] aRecordData = null;
    try
    {
      aRecordData = (pstrStringToConvert + '\0').getBytes(pstrCharSet);
    }
    catch(UnsupportedEncodingException e)
    {
      System.err.println("WARNING: " + e);
      aRecordData = (pstrStringToConvert + '\0').getBytes();
    }
    return aRecordData;
  }
    /**
   * Returns source code revision information.
   * @return revision string
   */
  public static String getMARFSourceCodeRevision()
  {
    return "$Revision: 1.6 $";
  }
}
// EOF