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; 2280b486724ca19b3c1c3c36334d06856330362f83Jesse Wilson 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Wraps an existing {@link InputStream} and counts the line terminators 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * encountered while reading the data. Line numbering starts at 0. Recognized 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * line terminator sequences are {@code '\r'}, {@code '\n'} and {@code "\r\n"}. 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * When using {@code read}, line terminator sequences are always translated into 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code '\n'}. 29f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 3099b4489d0555c6e0e5df941cbfad4cf250c8f0b8Elliott Hughes * @deprecated Use {@link LineNumberReader} instead. 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project@Deprecated 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class LineNumberInputStream extends FilterInputStream { 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private int lineNumber; 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private int markedLineNumber = -1; 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private int lastChar = -1; 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private int markedLastChar; 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code LineNumberInputStream} on the {@link InputStream} 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code in}. Line numbers are counted for all data read from this stream. 46f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 47858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson * <p><strong>Warning:</strong> passing a null source creates an invalid 48858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson * {@code LineNumberInputStream}. All operations on such a stream will fail. 49858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson * 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param in 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The non-null input stream to count line numbers. 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public LineNumberInputStream(InputStream in) { 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(in); 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 58582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * {@inheritDoc} 59582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * 60582d926fbf5f5fd4800def67f86ecfedee44681eElliott Hughes * <p>Note that the source stream may just be a sequence of {@code "\r\n"} bytes 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * which are converted into {@code '\n'} by this stream. Therefore, 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code available} returns only {@code in.available() / 2} bytes as 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * result. 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int available() throws IOException { 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return in.available() / 2 + (lastChar == -1 ? 0 : 1); 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the current line number for this stream. Numbering starts at 0. 72f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the current line number. 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getLineNumber() { 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return lineNumber; 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets a mark position in this stream. The parameter {@code readlimit} 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * indicates how many bytes can be read before the mark is invalidated. 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sending {@code reset()} will reposition this stream back to the marked 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * position, provided that {@code readlimit} has not been surpassed. 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The line number count will also be reset to the last marked 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * line number count. 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This implementation sets a mark in the filtered stream. 88f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param readlimit 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the number of bytes that can be read from this stream before 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the mark is invalidated. 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #markSupported() 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #reset() 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void mark(int readlimit) { 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project in.mark(readlimit); 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project markedLineNumber = lineNumber; 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project markedLastChar = lastChar; 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Reads a single byte from the filtered stream and returns it as an integer 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * in the range from 0 to 255. Returns -1 if the end of this stream has been 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * reached. 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The line number count is incremented if a line terminator is encountered. 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Recognized line terminator sequences are {@code '\r'}, {@code '\n'} and 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code "\r\n"}. Line terminator sequences are always translated into 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code '\n'}. 111f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the byte read or -1 if the end of the filtered stream has been 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * reached. 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the stream is closed or another IOException occurs. 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 117f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson @SuppressWarnings("fallthrough") 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int read() throws IOException { 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int currentChar = lastChar; 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (currentChar == -1) { 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project currentChar = in.read(); 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project lastChar = -1; 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project switch (currentChar) { 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case '\r': 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project currentChar = '\n'; 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project lastChar = in.read(); 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (lastChar == '\n') { 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project lastChar = -1; 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // fall through 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case '\n': 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project lineNumber++; 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return currentChar; 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 141325ff8c68ed5e530e9e1d487b9e2e6d8f8e2bd37Elliott Hughes * Reads up to {@code byteCount} bytes from the filtered stream and stores 142325ff8c68ed5e530e9e1d487b9e2e6d8f8e2bd37Elliott Hughes * them in the byte array {@code buffer} starting at {@code byteOffset}. 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the number of bytes actually read or -1 if no bytes have been 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * read and the end of this stream has been reached. 145325ff8c68ed5e530e9e1d487b9e2e6d8f8e2bd37Elliott Hughes * 146325ff8c68ed5e530e9e1d487b9e2e6d8f8e2bd37Elliott Hughes * <p>The line number count is incremented if a line terminator is encountered. 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Recognized line terminator sequences are {@code '\r'}, {@code '\n'} and 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code "\r\n"}. Line terminator sequences are always translated into 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code '\n'}. 150f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IndexOutOfBoundsException 152325ff8c68ed5e530e9e1d487b9e2e6d8f8e2bd37Elliott Hughes * if {@code byteOffset < 0 || byteCount < 0 || byteOffset + byteCount > buffer.length}. 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this stream is closed or another IOException occurs. 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 156325ff8c68ed5e530e9e1d487b9e2e6d8f8e2bd37Elliott Hughes * if {@code buffer == null}. 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 159325ff8c68ed5e530e9e1d487b9e2e6d8f8e2bd37Elliott Hughes public int read(byte[] buffer, int byteOffset, int byteCount) throws IOException { 160325ff8c68ed5e530e9e1d487b9e2e6d8f8e2bd37Elliott Hughes Arrays.checkOffsetAndCount(buffer.length, byteOffset, byteCount); 161325ff8c68ed5e530e9e1d487b9e2e6d8f8e2bd37Elliott Hughes for (int i = 0; i < byteCount; ++i) { 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int currentChar; 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project currentChar = read(); 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (i != 0) { 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return i; 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw e; 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (currentChar == -1) { 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return i == 0 ? -1 : i; 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 174325ff8c68ed5e530e9e1d487b9e2e6d8f8e2bd37Elliott Hughes buffer[byteOffset + i] = (byte) currentChar; 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 176325ff8c68ed5e530e9e1d487b9e2e6d8f8e2bd37Elliott Hughes return byteCount; 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Resets this stream to the last marked location. It also resets the line 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * count to what is was when this stream was marked. 182f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this stream is already closed, no mark has been set or the 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * mark is no longer valid because more than {@code readlimit} 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * bytes have been read since setting the mark. 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #mark(int) 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #markSupported() 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void reset() throws IOException { 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project in.reset(); 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project lineNumber = markedLineNumber; 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project lastChar = markedLastChar; 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the line number of this stream to the specified 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code lineNumber}. Note that this may have side effects on the 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * line number associated with the last marked position. 201f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param lineNumber 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new lineNumber value. 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #mark(int) 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #reset() 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setLineNumber(int lineNumber) { 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.lineNumber = lineNumber; 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Skips {@code count} number of bytes in this stream. Subsequent 213f9480f317cddcec859025833b748f096247a40aaElliott Hughes * calls to {@code read} will not return these bytes unless {@code reset} is 214f9480f317cddcec859025833b748f096247a40aaElliott Hughes * used. This implementation skips {@code byteCount} bytes in the 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * filtered stream and increments the line number count whenever line 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * terminator sequences are skipped. 217f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 21880b486724ca19b3c1c3c36334d06856330362f83Jesse Wilson * @param byteCount 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the number of bytes to skip. 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the number of bytes actually skipped. 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this stream is closed or another IOException occurs. 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #mark(int) 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #read() 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #reset() 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 22880b486724ca19b3c1c3c36334d06856330362f83Jesse Wilson public long skip(long byteCount) throws IOException { 22980b486724ca19b3c1c3c36334d06856330362f83Jesse Wilson return Streams.skipByReading(this, byteCount); 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 232