1. /*
  2. * The Apache Software License, Version 1.1
  3. *
  4. * Copyright (c) 1999 The Apache Software Foundation. All rights
  5. * reserved.
  6. *
  7. * Redistribution and use in source and binary forms, with or without
  8. * modification, are permitted provided that the following conditions
  9. * are met:
  10. *
  11. * 1. Redistributions of source code must retain the above copyright
  12. * notice, this list of conditions and the following disclaimer.
  13. *
  14. * 2. Redistributions in binary form must reproduce the above copyright
  15. * notice, this list of conditions and the following disclaimer in
  16. * the documentation and/or other materials provided with the
  17. * distribution.
  18. *
  19. * 3. The end-user documentation included with the redistribution, if
  20. * any, must include the following acknowlegement:
  21. * "This product includes software developed by the
  22. * Apache Software Foundation (http://www.apache.org/)."
  23. * Alternately, this acknowlegement may appear in the software itself,
  24. * if and wherever such third-party acknowlegements normally appear.
  25. *
  26. * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
  27. * Foundation" must not be used to endorse or promote products derived
  28. * from this software without prior written permission. For written
  29. * permission, please contact apache@apache.org.
  30. *
  31. * 5. Products derived from this software may not be called "Apache"
  32. * nor may "Apache" appear in their names without prior written
  33. * permission of the Apache Group.
  34. *
  35. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  36. * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  37. * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  38. * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  39. * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  40. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  41. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  42. * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  43. * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  44. * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  45. * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  46. * SUCH DAMAGE.
  47. * ====================================================================
  48. *
  49. * This software consists of voluntary contributions made by many
  50. * individuals on behalf of the Apache Software Foundation. For more
  51. * information on the Apache Software Foundation, please see
  52. * <http://www.apache.org/>.
  53. *
  54. * ====================================================================
  55. *
  56. * This source code implements specifications defined by the Java
  57. * Community Process. In order to remain compliant with the specification
  58. * DO NOT add / change / or delete method signatures!
  59. */
  60. package javax.servlet;
  61. import java.io.InputStream;
  62. import java.io.IOException;
  63. /**
  64. *
  65. * Provides an input stream for reading binary data from a client
  66. * request, including an efficient <code>readLine</code> method
  67. * for reading data one line at a time. With some protocols, such
  68. * as HTTP POST and PUT, a <code>ServletInputStream</code>
  69. * object can be used to read data sent from the client.
  70. *
  71. * <p>A <code>ServletInputStream</code> object is normally retrieved via
  72. * the {@link ServletRequest#getInputStream} method.
  73. *
  74. *
  75. * <p>This is an abstract class that a servlet container implements.
  76. * Subclasses of this class
  77. * must implement the <code>java.io.InputStream.read()</code> method.
  78. *
  79. *
  80. * @author Various
  81. * @version $Version$
  82. *
  83. * @see ServletRequest
  84. *
  85. */
  86. public abstract class ServletInputStream extends InputStream {
  87. /**
  88. * Does nothing, because this is an abstract class.
  89. *
  90. */
  91. protected ServletInputStream() { }
  92. /**
  93. *
  94. * Reads the input stream, one line at a time. Starting at an
  95. * offset, reads bytes into an array, until it reads a certain number
  96. * of bytes or reaches a newline character, which it reads into the
  97. * array as well.
  98. *
  99. * <p>This method returns -1 if it reaches the end of the input
  100. * stream before reading the maximum number of bytes.
  101. *
  102. *
  103. *
  104. * @param b an array of bytes into which data is read
  105. *
  106. * @param off an integer specifying the character at which
  107. * this method begins reading
  108. *
  109. * @param len an integer specifying the maximum number of
  110. * bytes to read
  111. *
  112. * @return an integer specifying the actual number of bytes
  113. * read, or -1 if the end of the stream is reached
  114. *
  115. * @exception IOException if an input or output exception has occurred
  116. *
  117. */
  118. public int readLine(byte[] b, int off, int len) throws IOException {
  119. if (len <= 0) {
  120. return 0;
  121. }
  122. int count = 0, c;
  123. while ((c = read()) != -1) {
  124. b[off++] = (byte)c;
  125. count++;
  126. if (c == '\n' || count == len) {
  127. break;
  128. }
  129. }
  130. return count > 0 ? count : -1;
  131. }
  132. }