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

  1. /*
  2.  * @(#)InputStreamStringBuffer.java    1.5 95/03/13 Jonathan Payne
  3.  *
  4.  * Copyright (c) 1994 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Permission to use, copy, modify, and distribute this software
  7.  * and its documentation for NON-COMMERCIAL purposes and without
  8.  * fee is hereby granted provided that this copyright notice
  9.  * appears in all copies. Please refer to the file "copyright.html"
  10.  * for further important copyright and licensing information.
  11.  *
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
  13.  * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
  14.  * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  15.  * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
  16.  * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  17.  * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
  18.  */
  19.  
  20. package java.io;
  21.  
  22. /**
  23.  * This class implements a String buffer that can be
  24.  * used as an InputStream. 
  25.  * @version     1.11, 31 Jan 1995
  26.  * @author    Arthur van Hoff
  27.  */
  28.  
  29. public
  30. class InputStreamStringBuffer extends InputStream {
  31.     /**
  32.      * The buffer.
  33.      */
  34.     String  buffer;
  35.  
  36.     /**
  37.      * The position in the buffer.
  38.      */
  39.     protected int pos;
  40.  
  41.     /**
  42.      * The number of characters to use in the buffer.
  43.      */
  44.     protected int count;
  45.  
  46.  
  47.     /**
  48.      * Creates an InputStreamStringBuffer, given an array of bytes.
  49.      * @param buf    the input buffer (not copied)
  50.      */
  51.     public InputStreamStringBuffer(String s) {
  52.     this.buffer = s;
  53.     count = s.length();
  54.     }
  55.  
  56.     /**
  57.      * Reads a byte.
  58.      * @return     the byte read, or -1 if the end of the
  59.      *        stream is reached.
  60.      */
  61.     public synchronized int read() {
  62.     return (pos < count) ? buffer.charAt(pos++) : -1;
  63.     }
  64.  
  65.     /**
  66.      * Reads into an array of bytes.
  67.      * For efficiency, this method should be overridden in a 
  68.      * subclass (the default implementation reads 1 byte
  69.      * at a time).
  70.      * @param b    the buffer into which the data is read
  71.      * @param off the start offset of the data
  72.      * @param len the maximum number of bytes read
  73.      * @return  the actual number of bytes read; -1 is
  74.      *         returned when the end of the stream is reached.
  75.      */
  76.     public synchronized int read(byte b[], int off, int len) {
  77.     if (pos >= count) {
  78.         return -1;
  79.     }
  80.     if (pos + len > count) {
  81.         len = count - pos;
  82.     }
  83.     if (len <= 0) {
  84.         return 0;
  85.     }
  86.     String    s = buffer;
  87.     int cnt = len;
  88.     while (--cnt >= 0) {
  89.         b[off++] = (byte)s.charAt(pos++);
  90.     }
  91.  
  92.     return len;
  93.     }
  94.  
  95.     /**
  96.      * Skips bytes of input.
  97.      * @param n     bytes to be skipped
  98.      * @return    actual number of bytes skipped
  99.      */
  100.     public synchronized int skip(int n) {
  101.     if (pos + n > count) {
  102.         n = count - pos;
  103.     }
  104.     if (n < 0) {
  105.         return 0;
  106.     }
  107.     pos += n;
  108.     return n;
  109.     }
  110.  
  111.     /**
  112.      * Returns the number of available bytes in the buffer.
  113.      * @return the number of available bytes
  114.      */
  115.     public synchronized int available() {
  116.     return count - pos;
  117.     }
  118.  
  119.     /**
  120.      * Resets the buffer to the beginning.
  121.      */
  122.     public synchronized void reset() {
  123.     pos = 0;
  124.     }
  125. }
  126.