glens       2002/06/12 01:18:07

  Modified:    src/java/org/apache/poi/util HexRead.java
  Log:
  Some more hex reading utilities
  
  Revision  Changes    Path
  1.3       +141 -35   jakarta-poi/src/java/org/apache/poi/util/HexRead.java
  
  Index: HexRead.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/util/HexRead.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- HexRead.java      9 Jun 2002 12:48:34 -0000       1.2
  +++ HexRead.java      12 Jun 2002 08:18:06 -0000      1.3
  @@ -1,3 +1,57 @@
  +/* ====================================================================
  + * The Apache Software License, Version 1.1
  + *
  + * Copyright (c) 2002 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 acknowledgment:
  + *       "This product includes software developed by the
  + *        Apache Software Foundation (http://www.apache.org/)."
  + *    Alternately, this acknowledgment may appear in the software itself,
  + *    if and wherever such third-party acknowledgments normally appear.
  + *
  + * 4. The names "Apache" and "Apache Software Foundation" and
  + *    "Apache POI" must not be used to endorse or promote products
  + *    derived from this software without prior written permission. For
  + *    written permission, please contact [EMAIL PROTECTED]
  + *
  + * 5. Products derived from this software may not be called "Apache",
  + *    "Apache POI", 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.poi.util;
   
   import java.io.IOException;
  @@ -7,13 +61,90 @@
   import java.util.List;
   import java.util.ArrayList;
   
  +/**
  + * Utilities to read hex from files.
  + *
  + * @author Marc Johnson
  + * @author Glen Stampoultzis (glens at apache.org)
  + */
   public class HexRead
   {
  -    public static byte[] readTestData( String filename )
  +    /**
  +     * This method reads hex data from a filename and returns a byte array.
  +     * The file may contain line comments that are preceeded with a # symbol.
  +     *
  +     * @param filename  The filename to read
  +     * @return The bytes read from the file.
  +     * @throws IOException If there was a problem while reading the file.
  +     */
  +    public static byte[] readData( String filename )
               throws IOException
       {
           File file = new File( filename );
           FileInputStream stream = new FileInputStream( file );
  +        try
  +        {
  +            return readData(stream, -1);
  +        }
  +        finally
  +        {
  +            stream.close();
  +        }
  +    }
  +
  +    /**
  +     * Same as readData(String) except that this method allows you to specify 
sections within
  +     * a file.  Sections are referenced using section headers in the form:
  +     * <pre>
  +     *  [sectioname]
  +     * </pre>
  +     *
  +     * @see #readData(String)
  +     */
  +    public static byte[] readData(String filename, String section)
  +        throws IOException
  +    {
  +        File file = new File( filename );
  +        FileInputStream stream = new FileInputStream( file );
  +        try
  +        {
  +            StringBuffer sectionText = new StringBuffer();
  +            boolean inSection = false;
  +            int c = stream.read();
  +            while (c != -1)
  +            {
  +                switch(c)
  +                {
  +                    case '[':
  +                        inSection = true;
  +                        break;
  +                    case '\n': case '\r':
  +                        inSection = false;
  +                        sectionText = new StringBuffer();
  +                        break;
  +                    case ']':
  +                        inSection = false;
  +                        if (sectionText.toString().equals(section))
  +                            return readData(stream, '[');
  +                        sectionText = new StringBuffer();
  +                        break;
  +                    default:
  +                        if (inSection)
  +                            sectionText.append((char)c);
  +                }
  +
  +                c = stream.read();
  +            }
  +        }
  +        finally
  +        {
  +            stream.close();
  +        }
  +        throw new IOException("Section '" + section + "' not found");
  +    }
  +
  +    static private byte[] readData( FileInputStream stream, int eofChar ) throws 
IOException
  +    {
           int characterCount = 0;
           byte b = (byte) 0;
           List bytes = new ArrayList();
  @@ -22,6 +153,10 @@
           while ( !done )
           {
               int count = stream.read();
  +            char baseChar = 'a';
  +
  +            if ( count == eofChar)
  +                break;
   
               switch ( count )
               {
  @@ -29,16 +164,7 @@
                   case '#':
                       readToEOL(stream);
                       break;
  -                case '0':
  -                case '1':
  -                case '2':
  -                case '3':
  -                case '4':
  -                case '5':
  -                case '6':
  -                case '7':
  -                case '8':
  -                case '9':
  +                case '0': case '1': case '2': case '3': case '4': case '5': case 
'6': case '7': case '8': case '9':
                       b <<= 4;
                       b += (byte) ( count - '0' );
                       characterCount++;
  @@ -50,31 +176,12 @@
                       }
                       break;
   
  -                case 'A':
  -                case 'B':
  -                case 'C':
  -                case 'D':
  -                case 'E':
  -                case 'F':
  -                    b <<= 4;
  -                    b += (byte) ( count + 10 - 'A' );
  -                    characterCount++;
  -                    if ( characterCount == 2 )
  -                    {
  -                        bytes.add( new Byte( b ) );
  -                        characterCount = 0;
  -                        b = (byte) 0;
  -                    }
  -                    break;
  +                case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
  +                    baseChar = 'A';
   
  -                case 'a':
  -                case 'b':
  -                case 'c':
  -                case 'd':
  -                case 'e':
  -                case 'f':
  +                case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
                       b <<= 4;
  -                    b += (byte) ( count + 10 - 'a' );
  +                    b += (byte) ( count + 10 - baseChar );
                       characterCount++;
                       if ( characterCount == 2 )
                       {
  @@ -92,7 +199,6 @@
                       break;
               }
           }
  -        stream.close();
           Byte[] polished = (Byte[]) bytes.toArray( new Byte[0] );
           byte[] rval = new byte[polished.length];
   
  
  
  

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

Reply via email to