1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.io; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20b9cc455ed89df1a0cf4186c92b352c9649995d96Elliott Hughesimport java.util.Arrays; 216186821cb13f4ac7ff50950c813394367e021eaeJesse Wilsonimport libcore.io.Streams; 223541c79d5058b86e742867b4ee5811a1de01de1fJesse Wilson 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 24ed79eabe3c220b66c07743ba6495c342a4b3eaf7Jesse Wilson * A readable source of bytes. 25ed79eabe3c220b66c07743ba6495c342a4b3eaf7Jesse Wilson * 26ed79eabe3c220b66c07743ba6495c342a4b3eaf7Jesse Wilson * <p>Most clients will use input streams that read data from the file system 27ed79eabe3c220b66c07743ba6495c342a4b3eaf7Jesse Wilson * ({@link FileInputStream}), the network ({@link java.net.Socket#getInputStream()}/{@link 28ed79eabe3c220b66c07743ba6495c342a4b3eaf7Jesse Wilson * java.net.HttpURLConnection#getInputStream()}), or from an in-memory byte 29ed79eabe3c220b66c07743ba6495c342a4b3eaf7Jesse Wilson * array ({@link ByteArrayInputStream}). 30ed79eabe3c220b66c07743ba6495c342a4b3eaf7Jesse Wilson * 31ed79eabe3c220b66c07743ba6495c342a4b3eaf7Jesse Wilson * <p>Use {@link InputStreamReader} to adapt a byte stream like this one into a 32ed79eabe3c220b66c07743ba6495c342a4b3eaf7Jesse Wilson * character stream. 33ed79eabe3c220b66c07743ba6495c342a4b3eaf7Jesse Wilson * 34ed79eabe3c220b66c07743ba6495c342a4b3eaf7Jesse Wilson * <p>Most clients should wrap their input stream with {@link 35ed79eabe3c220b66c07743ba6495c342a4b3eaf7Jesse Wilson * BufferedInputStream}. Callers that do only bulk reads may omit buffering. 36ed79eabe3c220b66c07743ba6495c342a4b3eaf7Jesse Wilson * 37ed79eabe3c220b66c07743ba6495c342a4b3eaf7Jesse Wilson * <p>Some implementations support marking a position in the input stream and 38ed79eabe3c220b66c07743ba6495c342a4b3eaf7Jesse Wilson * resetting back to this position later. Implementations that don't return 39ed79eabe3c220b66c07743ba6495c342a4b3eaf7Jesse Wilson * false from {@link #markSupported()} and throw an {@link IOException} when 40ed79eabe3c220b66c07743ba6495c342a4b3eaf7Jesse Wilson * {@link #reset()} is called. 41ed79eabe3c220b66c07743ba6495c342a4b3eaf7Jesse Wilson * 42ed79eabe3c220b66c07743ba6495c342a4b3eaf7Jesse Wilson * <h3>Subclassing InputStream</h3> 43ed79eabe3c220b66c07743ba6495c342a4b3eaf7Jesse Wilson * Subclasses that decorate another input stream should consider subclassing 44ed79eabe3c220b66c07743ba6495c342a4b3eaf7Jesse Wilson * {@link FilterInputStream}, which delegates all calls to the source input 45ed79eabe3c220b66c07743ba6495c342a4b3eaf7Jesse Wilson * stream. 46ed79eabe3c220b66c07743ba6495c342a4b3eaf7Jesse Wilson * 47ed79eabe3c220b66c07743ba6495c342a4b3eaf7Jesse Wilson * <p>All input stream subclasses should override <strong>both</strong> {@link 48ed79eabe3c220b66c07743ba6495c342a4b3eaf7Jesse Wilson * #read() read()} and {@link #read(byte[],int,int) read(byte[],int,int)}. The 49ed79eabe3c220b66c07743ba6495c342a4b3eaf7Jesse Wilson * three argument overload is necessary for bulk access to the data. This is 50ed79eabe3c220b66c07743ba6495c342a4b3eaf7Jesse Wilson * much more efficient than byte-by-byte access. 51f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see OutputStream 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic abstract class InputStream extends Object implements Closeable { 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This constructor does nothing. It is provided for signature 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * compatibility. 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public InputStream() { 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* empty */ 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 65582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * Returns an estimated number of bytes that can be read or skipped without blocking for more 66582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * input. 67f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 68582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * <p>Note that this method provides such a weak guarantee that it is not very useful in 69582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * practice. 70582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * 71582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * <p>Firstly, the guarantee is "without blocking for more input" rather than "without 72582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * blocking": a read may still block waiting for I/O to complete — the guarantee is 73582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * merely that it won't have to wait indefinitely for data to be written. The result of this 74582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * method should not be used as a license to do I/O on a thread that shouldn't be blocked. 75582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * 76582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * <p>Secondly, the result is a 77582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * conservative estimate and may be significantly smaller than the actual number of bytes 78582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * available. In particular, an implementation that always returns 0 would be correct. 79582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * In general, callers should only use this method if they'd be satisfied with 80582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * treating the result as a boolean yes or no answer to the question "is there definitely 81582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * data ready?". 82582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * 83582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * <p>Thirdly, the fact that a given number of bytes is "available" does not guarantee that a 84582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * read or skip will actually read or skip that many bytes: they may read or skip fewer. 85582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * 86582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * <p>It is particularly important to realize that you <i>must not</i> use this method to 87582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * size a container and assume that you can read the entirety of the stream without needing 88582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * to resize the container. Such callers should probably write everything they read to a 89582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * {@link ByteArrayOutputStream} and convert that to a byte array. Alternatively, if you're 90582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * reading from a file, {@link File#length} returns the current length of the file (though 91582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * assuming the file's length can't change may be incorrect, reading a file is inherently 92582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * racy). 93582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * 94582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * <p>The default implementation of this method in {@code InputStream} always returns 0. 95582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * Subclasses should override this method if they are able to indicate the number of bytes 96582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * available. 97582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * 98582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * @return the estimated number of bytes available 99582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * @throws IOException if this stream is closed or an error occurs 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int available() throws IOException { 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return 0; 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Closes this stream. Concrete implementations of this class should free 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * any resources during close. This implementation does nothing. 108f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an error occurs while closing this stream. 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void close() throws IOException { 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* empty */ 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets a mark position in this InputStream. The parameter {@code readlimit} 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * indicates how many bytes can be read before the mark is invalidated. 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sending {@code reset()} will reposition the stream back to the marked 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * position provided {@code readLimit} has not been surpassed. 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This default implementation does nothing and concrete subclasses must 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * provide their own implementation. 124f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param readlimit 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the number of bytes that can be read from this stream before 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the mark is invalidated. 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #markSupported() 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #reset() 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void mark(int readlimit) { 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* empty */ 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Indicates whether this stream supports the {@code mark()} and 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code reset()} methods. The default implementation returns {@code false}. 138f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return always {@code false}. 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #mark(int) 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #reset() 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean markSupported() { 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Reads a single byte from this stream and returns it as an integer in the 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * range from 0 to 255. Returns -1 if the end of the stream has been 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * reached. Blocks until one byte has been read, the end of the source 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * stream is detected or an exception is thrown. 152f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the byte read or -1 if the end of stream has been reached. 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the stream is closed or another IOException occurs. 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract int read() throws IOException; 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 160eb8027492e81d5d3a0d1cd49494c59f9a03eeaa3Elliott Hughes * Equivalent to {@code read(buffer, 0, buffer.length)}. 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 162eb8027492e81d5d3a0d1cd49494c59f9a03eeaa3Elliott Hughes public int read(byte[] buffer) throws IOException { 163eb8027492e81d5d3a0d1cd49494c59f9a03eeaa3Elliott Hughes return read(buffer, 0, buffer.length); 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Reads at most {@code length} bytes from this stream and stores them in 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the byte array {@code b} starting at {@code offset}. 169f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 17008a723cb3291b96a323478bd7d799192818cb0b1Jesse Wilson * @param buffer 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the byte array in which to store the bytes read. 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param offset 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the initial position in {@code buffer} to store the bytes read 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * from this stream. 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param length 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the maximum number of bytes to store in {@code b}. 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the number of bytes actually read or -1 if the end of the stream 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * has been reached. 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IndexOutOfBoundsException 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code offset < 0} or {@code length < 0}, or if 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code offset + length} is greater than the length of 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code b}. 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the stream is closed or another IOException occurs. 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 18608a723cb3291b96a323478bd7d799192818cb0b1Jesse Wilson public int read(byte[] buffer, int offset, int length) throws IOException { 187b9cc455ed89df1a0cf4186c92b352c9649995d96Elliott Hughes Arrays.checkOffsetAndCount(buffer.length, offset, length); 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < length; i++) { 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int c; 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if ((c = read()) == -1) { 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return i == 0 ? -1 : i; 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (i != 0) { 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return i; 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw e; 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 20008a723cb3291b96a323478bd7d799192818cb0b1Jesse Wilson buffer[offset + i] = (byte) c; 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return length; 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Resets this stream to the last marked location. Throws an 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code IOException} if the number of bytes read since the mark has been 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * set is greater than the limit provided to {@code mark}, or if no mark 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * has been set. 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This implementation always throws an {@code IOException} and concrete 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * subclasses should provide the proper implementation. 213f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this stream is closed or another IOException occurs. 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized void reset() throws IOException { 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IOException(); 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 222582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * Skips at most {@code n} bytes in this stream. This method does nothing and returns 223f9480f317cddcec859025833b748f096247a40aaElliott Hughes * 0 if {@code n} is negative, but some subclasses may throw. 224582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * 225582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * <p>Note the "at most" in the description of this method: this method may choose to skip 226582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * fewer bytes than requested. Callers should <i>always</i> check the return value. 227582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * 228582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * <p>This default implementation reads bytes into a temporary 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * buffer. Concrete subclasses should provide their own implementation. 230f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 2313541c79d5058b86e742867b4ee5811a1de01de1fJesse Wilson * @param byteCount the number of bytes to skip. 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the number of bytes actually skipped. 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this stream is closed or another IOException occurs. 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2363541c79d5058b86e742867b4ee5811a1de01de1fJesse Wilson public long skip(long byteCount) throws IOException { 2373541c79d5058b86e742867b4ee5811a1de01de1fJesse Wilson return Streams.skipByReading(this, byteCount); 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 240