Mercurial Hosting > luan
comparison src/goodjava/io/BufferedInputStream.java @ 1483:97740900c820
minor
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sat, 25 Apr 2020 10:31:49 -0600 |
parents | 1f41e5921090 |
children | fe237d72b234 |
comparison
equal
deleted
inserted
replaced
1482:4c409291090f | 1483:97740900c820 |
---|---|
21 * | 21 * |
22 * @author Arthur van Hoff | 22 * @author Arthur van Hoff |
23 * @since JDK1.0 | 23 * @since JDK1.0 |
24 */ | 24 */ |
25 public final class BufferedInputStream extends FilterInputStream { | 25 public final class BufferedInputStream extends FilterInputStream { |
26 private static int DEFAULT_BUFFER_SIZE = 8192; | |
27 private final byte buf[]; | 26 private final byte buf[]; |
28 private boolean isClosed = false; | |
29 | 27 |
30 /** | 28 /** |
31 * The index one greater than the index of the last valid byte in | 29 * The index one greater than the index of the last valid byte in |
32 * the buffer. | 30 * the buffer. |
33 * This value is always | 31 * This value is always |
53 * | 51 * |
54 * @see java.io.BufferedInputStream#buf | 52 * @see java.io.BufferedInputStream#buf |
55 */ | 53 */ |
56 private int pos; | 54 private int pos; |
57 | 55 |
58 private void checkClosed() throws IOException { | |
59 if (isClosed) | |
60 throw new IOException("Stream closed"); | |
61 } | |
62 | |
63 /** | 56 /** |
64 * Creates a <code>BufferedInputStream</code> | 57 * Creates a <code>BufferedInputStream</code> |
65 * and saves its argument, the input stream | 58 * and saves its argument, the input stream |
66 * <code>in</code>, for later use. An internal | 59 * <code>in</code>, for later use. An internal |
67 * buffer array is created and stored in <code>buf</code>. | 60 * buffer array is created and stored in <code>buf</code>. |
68 * | 61 * |
69 * @param in the underlying input stream. | 62 * @param in the underlying input stream. |
70 */ | 63 */ |
71 public BufferedInputStream(InputStream in) { | 64 public BufferedInputStream(InputStream in) { |
72 this(in, DEFAULT_BUFFER_SIZE); | 65 this(in, 8192); |
73 } | 66 } |
74 | 67 |
75 /** | 68 /** |
76 * Creates a <code>BufferedInputStream</code> | 69 * Creates a <code>BufferedInputStream</code> |
77 * with the specified buffer size, | 70 * with the specified buffer size, |
113 * invoking its {@link #close()} method, | 106 * invoking its {@link #close()} method, |
114 * or an I/O error occurs. | 107 * or an I/O error occurs. |
115 * @see java.io.FilterInputStream#in | 108 * @see java.io.FilterInputStream#in |
116 */ | 109 */ |
117 public synchronized int read() throws IOException { | 110 public synchronized int read() throws IOException { |
118 checkClosed(); | |
119 if (pos >= count) { | 111 if (pos >= count) { |
120 fill(); | 112 fill(); |
121 if (pos >= count) | 113 if (pos >= count) |
122 return -1; | 114 return -1; |
123 } | 115 } |
127 /** | 119 /** |
128 * Read characters into a portion of an array, reading from the underlying | 120 * Read characters into a portion of an array, reading from the underlying |
129 * stream at most once if necessary. | 121 * stream at most once if necessary. |
130 */ | 122 */ |
131 public synchronized int read(byte[] b, int off, int len) throws IOException { | 123 public synchronized int read(byte[] b, int off, int len) throws IOException { |
132 checkClosed(); | |
133 int avail = count - pos; | 124 int avail = count - pos; |
134 if (avail <= 0) { | 125 if (avail <= 0) { |
135 /* If the requested length is at least as large as the buffer, do not bother to copy the | 126 /* If the requested length is at least as large as the buffer, do not bother to copy the |
136 bytes into the local buffer. In this way buffered streams will | 127 bytes into the local buffer. In this way buffered streams will |
137 cascade harmlessly. */ | 128 cascade harmlessly. */ |
156 * or if this input stream has been closed by | 147 * or if this input stream has been closed by |
157 * invoking its {@link #close()} method, or an | 148 * invoking its {@link #close()} method, or an |
158 * I/O error occurs. | 149 * I/O error occurs. |
159 */ | 150 */ |
160 public synchronized long skip(long n) throws IOException { | 151 public synchronized long skip(long n) throws IOException { |
161 checkClosed(); | |
162 long avail = count - pos; | 152 long avail = count - pos; |
163 if (avail <= 0) { | 153 if (avail <= 0) { |
164 return super.skip(n); | 154 return super.skip(n); |
165 } | 155 } |
166 long skipped = (avail < n) ? avail : n; | 156 long skipped = (avail < n) ? avail : n; |
201 | 191 |
202 public boolean markSupported() { | 192 public boolean markSupported() { |
203 return false; | 193 return false; |
204 } | 194 } |
205 | 195 |
206 /** | |
207 * Closes this input stream and releases any system resources | |
208 * associated with the stream. | |
209 * Once the stream has been closed, further read(), available(), reset(), | |
210 * or skip() invocations will throw an IOException. | |
211 * Closing a previously closed stream has no effect. | |
212 * | |
213 * @exception IOException if an I/O error occurs. | |
214 */ | |
215 public synchronized void close() throws IOException { | |
216 isClosed = true; | |
217 super.close(); | |
218 } | |
219 } | 196 } |