01: /*
02: * Licensed to the Apache Software Foundation (ASF) under one or more
03: * contributor license agreements. See the NOTICE file distributed with
04: * this work for additional information regarding copyright ownership.
05: * The ASF licenses this file to You under the Apache License, Version 2.0
06: * (the "License"); you may not use this file except in compliance with
07: * the License. You may obtain a copy of the License at
08: *
09: * http://www.apache.org/licenses/LICENSE-2.0
10: *
11: * Unless required by applicable law or agreed to in writing, software
12: * distributed under the License is distributed on an "AS IS" BASIS,
13: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14: * See the License for the specific language governing permissions and
15: * limitations under the License.
16: */
17: package javax.servlet;
18:
19: import java.io.InputStream;
20: import java.io.IOException;
21:
22: /**
23: *
24: * Provides an input stream for reading binary data from a client
25: * request, including an efficient <code>readLine</code> method
26: * for reading data one line at a time. With some protocols, such
27: * as HTTP POST and PUT, a <code>ServletInputStream</code>
28: * object can be used to read data sent from the client.
29: *
30: * <p>A <code>ServletInputStream</code> object is normally retrieved via
31: * the {@link ServletRequest#getInputStream} method.
32: *
33: *
34: * <p>This is an abstract class that a servlet container implements.
35: * Subclasses of this class
36: * must implement the <code>java.io.InputStream.read()</code> method.
37: *
38: *
39: * @author Various
40: * @version $Version$
41: *
42: * @see ServletRequest
43: *
44: */
45:
46: public abstract class ServletInputStream extends InputStream {
47:
48: /**
49: * Does nothing, because this is an abstract class.
50: *
51: */
52:
53: protected ServletInputStream() {
54: }
55:
56: /**
57: *
58: * Reads the input stream, one line at a time. Starting at an
59: * offset, reads bytes into an array, until it reads a certain number
60: * of bytes or reaches a newline character, which it reads into the
61: * array as well.
62: *
63: * <p>This method returns -1 if it reaches the end of the input
64: * stream before reading the maximum number of bytes.
65: *
66: *
67: *
68: * @param b an array of bytes into which data is read
69: *
70: * @param off an integer specifying the character at which
71: * this method begins reading
72: *
73: * @param len an integer specifying the maximum number of
74: * bytes to read
75: *
76: * @return an integer specifying the actual number of bytes
77: * read, or -1 if the end of the stream is reached
78: *
79: * @exception IOException if an input or output exception has occurred
80: *
81: */
82:
83: public int readLine(byte[] b, int off, int len) throws IOException {
84:
85: if (len <= 0) {
86: return 0;
87: }
88: int count = 0, c;
89:
90: while ((c = read()) != -1) {
91: b[off++] = (byte) c;
92: count++;
93: if (c == '\n' || count == len) {
94: break;
95: }
96: }
97: return count > 0 ? count : -1;
98: }
99: }
|