/* EOFException.java -- Unexpected end of file exception
   Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.

This file is part of GNU Classpath.

GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
 
GNU Classpath 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
General Public License for more details.

You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING.  If not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.

As a special exception, if you link this library with other files to
produce an executable, this library does not by itself cause the
resulting executable to be covered by the GNU General Public License.
This exception does not however invalidate any other reasons why the
executable file might be covered by the GNU General Public License. */


package java.io;

/* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
 * "The Java Language Specification", ISBN 0-201-63451-1
 * Status:  Complete to 1.1.
 */

/**
  * This exception is thrown when the end of the file or stream was 
  * encountered unexpectedly.  This is not the normal way that a normal
  * EOF condition is reported.  Normally a special value such as -1 is
  * returned.  However, certain types of streams expecting certain data
  * in a certain format might reach EOF before reading their expected
  * data pattern and thus throw this exception.
  *
  * @version 0.0
  *
  * @author Aaron M. Renn (arenn@urbanophile.com)
  * @author Tom Tromey <tromey@cygnus.com>
  * @date September 24, 1998
  */
public class EOFException extends IOException
{

/*
 * Constructors
 */

/**
  * Create a new EOFException without a descriptive error message
  */
public
EOFException()
{
  super();
}

/*************************************************************************/

/**
  * Create a new EOFException with a descriptive error message String
  *
  * @param message The descriptive error message
  */
public
EOFException(String message)
{
  super(message);
}

} // class EOFException

