home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1995 November / PCWK1195.iso / inne / win95 / sieciowe / hotja32.lzh / hotjava / classsrc / java / io / stringinputstream.java < prev    next >
Text File  |  1995-08-11  |  2KB  |  90 lines

  1. /*
  2.  * @(#)StringInputStream.java    1.1 95/05/10 James Gosling
  3.  * 
  4.  * Copyright (c) 1994 Sun Microsystems, Inc. All Rights Reserved.
  5.  * 
  6.  * Permission to use, copy, modify, and distribute this software and its
  7.  * documentation for NON-COMMERCIAL purposes and without fee is hereby
  8.  * granted provided that this copyright notice appears in all copies. Please
  9.  * refer to the file "copyright.html" for further important copyright and
  10.  * licensing information.
  11.  * 
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
  13.  * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  14.  * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
  15.  * OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY
  16.  * LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR
  17.  * ITS DERIVATIVES.
  18.  */
  19.  
  20. package java.io;
  21. import java.io.File;
  22.  
  23. /**
  24.  * String input stream, can be constructed from a String.
  25.  * Allows a String to be read as though it's a Stream.
  26.  * @author    James Gosling
  27.  */
  28. public
  29. class StringInputStream extends InputStream {
  30.  
  31.     private String s;
  32.     private int pos;
  33.  
  34.     /**
  35.      * Creates an input file given a string.
  36.      */
  37.     public StringInputStream (String str) {
  38.     s = str;
  39.     }
  40.  
  41.     /**
  42.      * Reads a byte.
  43.      * @return     the byte read, or -1 if the end of the
  44.      *        stream is reached.
  45.      */
  46.     public synchronized int read() {
  47.     try {
  48.         return s.charAt(pos++);
  49.     } catch(Exception e) {
  50.         return -1;
  51.     }
  52.     }
  53.  
  54.     /**
  55.      * Skips bytes of input.
  56.      * @param n     bytes to be skipped
  57.      * @return    actual number of bytes skipped
  58.      * @exception IOException i/o error occurred
  59.      */
  60.     public synchronized int skip(int n) {
  61.     int lpos = pos + n;
  62.     int limit = s.length();
  63.     if (lpos > limit) {
  64.         n = limit - pos;
  65.         lpos = limit;
  66.     }
  67.     pos = lpos;
  68.     return n;
  69.     }
  70.  
  71.     /**
  72.      * Returns the number of bytes that can be read
  73.      * without blocking.
  74.      * @return the number of available bytes, which is initially
  75.      *        equal to the file size
  76.      */
  77.     public synchronized int available() {
  78.     int ret = (s != null ? 0 : s.length()) - pos;
  79.     return ret <= 0 ? 0 : ret;
  80.     }
  81.  
  82.     /**
  83.      * Closes the input stream.
  84.      * @exception IOException i/o error occurred
  85.      */
  86.     public synchronized void close() {
  87.     s = null;
  88.     }
  89. }
  90.