1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this work for additional information regarding copyright ownership. 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (the "License"); you may not use this file except in compliance with 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the License. You may obtain a copy of the License at 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage java.io; 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.luni.util.Msg; 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.luni.util.Util; 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 243819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Wraps an existing {@link InputStream} and reads typed data from it. 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Typically, this stream has been written by a DataOutputStream. Types that can 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * be read include byte, 16-bit short, 32-bit int, 32-bit float, 64-bit long, 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 64-bit double, byte strings, and strings encoded in 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@link DataInput modified UTF-8}. 293819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see DataOutputStream 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class DataInputStream extends FilterInputStream implements DataInput { 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 343819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson byte[] buff; 353819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Constructs a new DataInputStream on the InputStream {@code in}. All 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * reads are then filtered through this stream. Note that data read by this 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * stream is not in a human readable format and was most likely created by a 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * DataOutputStream. 413819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param in 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the source InputStream the filter reads from. 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see DataOutputStream 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see RandomAccessFile 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public DataInputStream(InputStream in) { 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(in); 493819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson buff = new byte[8]; 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Reads bytes from this stream into the byte array {@code buffer}. Returns 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the number of bytes that have been read. 553819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param buffer 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the buffer to read bytes into. 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the number of bytes that have been read or -1 if the end of the 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * stream has been reached. 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IOException 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if a problem occurs while reading from this stream. 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see DataOutput#write(byte[]) 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see DataOutput#write(byte[], int, int) 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final int read(byte[] buffer) throws IOException { 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return in.read(buffer, 0, buffer.length); 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Reads at most {@code length} bytes from this stream and stores them in 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the byte array {@code buffer} starting at {@code offset}. Returns the 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * number of bytes that have been read or -1 if no bytes have been read and 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the end of the stream has been reached. 753819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param buffer 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the byte array in which to store the bytes read. 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param offset 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the initial position in {@code buffer} to store the bytes 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * read from this stream. 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param length 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the maximum number of bytes to store in {@code buffer}. 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the number of bytes that have been read or -1 if the end of the 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * stream has been reached. 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IOException 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if a problem occurs while reading from this stream. 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see DataOutput#write(byte[]) 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see DataOutput#write(byte[], int, int) 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final int read(byte[] buffer, int offset, int length) 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws IOException { 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return in.read(buffer, offset, length); 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Reads a boolean from this stream. 983819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the next boolean value from the source stream. 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws EOFException 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the end of the filtered stream is reached before one byte 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * has been read. 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IOException 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if a problem occurs while reading from this stream. 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see DataOutput#writeBoolean(boolean) 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final boolean readBoolean() throws IOException { 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int temp = in.read(); 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (temp < 0) { 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new EOFException(); 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return temp != 0; 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Reads an 8-bit byte value from this stream. 1173819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the next byte value from the source stream. 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws EOFException 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the end of the filtered stream is reached before one byte 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * has been read. 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IOException 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if a problem occurs while reading from this stream. 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see DataOutput#writeByte(int) 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final byte readByte() throws IOException { 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int temp = in.read(); 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (temp < 0) { 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new EOFException(); 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return (byte) temp; 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Reads a 16-bit character value from this stream. 1363819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the next char value from the source stream. 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws EOFException 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the end of the filtered stream is reached before two bytes 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * have been read. 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IOException 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if a problem occurs while reading from this stream. 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see DataOutput#writeChar(int) 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final char readChar() throws IOException { 1463819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson if (readToBuff(2) < 0){ 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new EOFException(); 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1493819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson return (char) (((buff[0] & 0xff) << 8) | (buff[1] & 0xff)); 1503819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson 1513819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson } 1523819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson 1533819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson private int readToBuff(int count) throws IOException { 1543819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson int offset = 0; 1553819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson 1563819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson while(offset < count) { 1573819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson int bytesRead = in.read(buff, offset, count - offset); 1583819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson if(bytesRead == -1) return bytesRead; 1593819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson offset += bytesRead; 1603819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson } 1613819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson return offset; 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Reads a 64-bit double value from this stream. 1663819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the next double value from the source stream. 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws EOFException 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the end of the filtered stream is reached before eight 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * bytes have been read. 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IOException 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if a problem occurs while reading from this stream. 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see DataOutput#writeDouble(double) 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final double readDouble() throws IOException { 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return Double.longBitsToDouble(readLong()); 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Reads a 32-bit float value from this stream. 1813819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the next float value from the source stream. 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws EOFException 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the end of the filtered stream is reached before four 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * bytes have been read. 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IOException 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if a problem occurs while reading from this stream. 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see DataOutput#writeFloat(float) 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final float readFloat() throws IOException { 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return Float.intBitsToFloat(readInt()); 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Reads bytes from this stream into the byte array {@code buffer}. This 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * method will block until {@code buffer.length} number of bytes have been 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * read. 1983819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param buffer 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to read bytes into. 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws EOFException 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the end of the source stream is reached before enough 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * bytes have been read. 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IOException 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if a problem occurs while reading from this stream. 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see DataOutput#write(byte[]) 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see DataOutput#write(byte[], int, int) 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final void readFully(byte[] buffer) throws IOException { 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project readFully(buffer, 0, buffer.length); 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Reads bytes from this stream and stores them in the byte array {@code 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * buffer} starting at the position {@code offset}. This method blocks until 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code length} bytes have been read. If {@code length} is zero, then this 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * method returns without reading any bytes. 2183819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param buffer 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the byte array into which the data is read. 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param offset 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the offset in {@code buffer} from where to store the bytes 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * read. 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param length 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the maximum number of bytes to read. 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws EOFException 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the end of the source stream is reached before enough 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * bytes have been read. 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IndexOutOfBoundsException 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if {@code offset < 0} or {@code length < 0}, or if {@code 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * offset + length} is greater than the size of {@code buffer}. 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IOException 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if a problem occurs while reading from this stream. 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws NullPointerException 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if {@code buffer} or the source stream are null. 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.io.DataInput#readFully(byte[], int, int) 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final void readFully(byte[] buffer, int offset, int length) 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws IOException { 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // BEGIN android-removed 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // if (length < 0) { 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // throw new IndexOutOfBoundsException(); 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // } 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // END android-removed 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (length == 0) { 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return; 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (in == null) { 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new NullPointerException(Msg.getString("KA00b")); //$NON-NLS-1$ 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (buffer == null) { 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new NullPointerException(Msg.getString("K0047")); //$NON-NLS-1$ 253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // BEGIN android-changed 255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Exception priorities (in case of multiple errors) differ from 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // RI, but are spec-compliant. 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // used (offset | length) < 0 instead of separate (offset < 0) and 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // (length < 0) check to safe one operation 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ((offset | length) < 0 || offset > buffer.length - length) { 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IndexOutOfBoundsException(Msg.getString("K002f")); //$NON-NLS-1$ 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // END android-changed 263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (length > 0) { 264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int result = in.read(buffer, offset, length); 265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (result < 0) { 266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new EOFException(); 267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project offset += result; 269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project length -= result; 270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Reads a 32-bit integer value from this stream. 2753819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the next int value from the source stream. 277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws EOFException 278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the end of the filtered stream is reached before four 279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * bytes have been read. 280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IOException 281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if a problem occurs while reading from this stream. 282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see DataOutput#writeInt(int) 283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final int readInt() throws IOException { 2853819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson if (readToBuff(4) < 0){ 2863819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson throw new EOFException(); 287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2883819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson return ((buff[0] & 0xff) << 24) | ((buff[1] & 0xff) << 16) | 2893819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson ((buff[2] & 0xff) << 8) | (buff[3] & 0xff); 290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns a string that contains the next line of text available from the 294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * source stream. A line is represented by zero or more characters followed 295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * by {@code '\n'}, {@code '\r'}, {@code "\r\n"} or the end of the stream. 296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The string does not include the newline sequence. 2973819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the contents of the line or {@code null} if no characters were 299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * read before the end of the source stream has been reached. 300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IOException 301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if a problem occurs while reading from this stream. 302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @deprecated Use {@link BufferedReader} 303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Deprecated 305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final String readLine() throws IOException { 30601021fcb0c9026e81ac2c262caf5e2ec830a7025Jesse Wilson StringBuilder line = new StringBuilder(80); // Typical line length 307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean foundTerminator = false; 308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (true) { 309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int nextByte = in.read(); 310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project switch (nextByte) { 311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case -1: 312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (line.length() == 0 && !foundTerminator) { 313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return line.toString(); 316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case (byte) '\r': 317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (foundTerminator) { 318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ((PushbackInputStream) in).unread(nextByte); 319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return line.toString(); 320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project foundTerminator = true; 322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Have to be able to peek ahead one byte */ 323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (!(in.getClass() == PushbackInputStream.class)) { 324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project in = new PushbackInputStream(in); 325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project break; 327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case (byte) '\n': 328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return line.toString(); 329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project default: 330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (foundTerminator) { 331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ((PushbackInputStream) in).unread(nextByte); 332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return line.toString(); 333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project line.append((char) nextByte); 335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Reads a 64-bit long value from this stream. 3413819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the next long value from the source stream. 343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws EOFException 344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the end of the filtered stream is reached before eight 345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * bytes have been read. 346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IOException 347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if a problem occurs while reading from this stream. 348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see DataOutput#writeLong(long) 349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final long readLong() throws IOException { 3513819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson if (readToBuff(8) < 0){ 352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new EOFException(); 353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3543819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson int i1 = ((buff[0] & 0xff) << 24) | ((buff[1] & 0xff) << 16) | 3553819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson ((buff[2] & 0xff) << 8) | (buff[3] & 0xff); 3563819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson int i2 = ((buff[4] & 0xff) << 24) | ((buff[5] & 0xff) << 16) | 3573819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson ((buff[6] & 0xff) << 8) | (buff[7] & 0xff); 3583819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson 3593819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson return ((i1 & 0xffffffffL) << 32) | (i2 & 0xffffffffL); 360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Reads a 16-bit short value from this stream. 3643819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the next short value from the source stream. 366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws EOFException 367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the end of the filtered stream is reached before two bytes 368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * have been read. 369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IOException 370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if a problem occurs while reading from this stream. 371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see DataOutput#writeShort(int) 372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final short readShort() throws IOException { 3743819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson if (readToBuff(2) < 0){ 3753819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson throw new EOFException(); 376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3773819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson return (short) (((buff[0] & 0xff) << 8) | (buff[1] & 0xff)); 378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Reads an unsigned 8-bit byte value from this stream and returns it as an 382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * int. 3833819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the next unsigned byte value from the source stream. 385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws EOFException 386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the end of the filtered stream has been reached before one 387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * byte has been read. 388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IOException 389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if a problem occurs while reading from this stream. 390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see DataOutput#writeByte(int) 391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final int readUnsignedByte() throws IOException { 393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int temp = in.read(); 394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (temp < 0) { 395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new EOFException(); 396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return temp; 398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Reads a 16-bit unsigned short value from this stream and returns it as an 402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * int. 4033819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the next unsigned short value from the source stream. 405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws EOFException 406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the end of the filtered stream is reached before two bytes 407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * have been read. 408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IOException 409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if a problem occurs while reading from this stream. 410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see DataOutput#writeShort(int) 411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final int readUnsignedShort() throws IOException { 4133819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson if (readToBuff(2) < 0){ 414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new EOFException(); 415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 4163819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson return (char) (((buff[0] & 0xff) << 8) | (buff[1] & 0xff)); 417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Reads an string encoded in {@link DataInput modified UTF-8} from this 421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * stream. 4223819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the next {@link DataInput MUTF-8} encoded string read from the 424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * source stream. 425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws EOFException if the end of the input is reached before the read 426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * request can be satisfied. 427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IOException 428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if a problem occurs while reading from this stream. 429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see DataOutput#writeUTF(java.lang.String) 430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final String readUTF() throws IOException { 4323819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson return decodeUTF(readUnsignedShort()); 433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String decodeUTF(int utfSize) throws IOException { 4373819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson return decodeUTF(utfSize, this); 4383819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson } 4393819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson 4403819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson private static String decodeUTF(int utfSize, DataInput in) throws IOException { 441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] buf = new byte[utfSize]; 442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project char[] out = new char[utfSize]; 4433819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson in.readFully(buf, 0, utfSize); 4443819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson 4453819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson return Util.convertUTF8WithBuf(buf, out, 0, utfSize); 446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Reads a string encoded in {@link DataInput modified UTF-8} from the 450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code DataInput} stream {@code in}. 4513819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param in 453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the input stream to read from. 454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the next {@link DataInput MUTF-8} encoded string from the source 455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * stream. 456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IOException 457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if a problem occurs while reading from this stream. 458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see DataOutputStream#writeUTF(java.lang.String) 459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final String readUTF(DataInput in) throws IOException { 4613819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson return decodeUTF(in.readUnsignedShort(), in); 462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Skips {@code count} number of bytes in this stream. Subsequent {@code 466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * read()}s will not return these bytes unless {@code reset()} is used. 4673819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This method will not throw an {@link EOFException} if the end of the 469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * input is reached before {@code count} bytes where skipped. 4703819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param count 472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the number of bytes to skip. 473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the number of bytes actually skipped. 474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IOException 475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if a problem occurs during skipping. 476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see #mark(int) 477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see #reset() 478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final int skipBytes(int count) throws IOException { 480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int skipped = 0; 481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project long skip; 482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (skipped < count && (skip = in.skip(count - skipped)) != 0) { 483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project skipped += skip; 484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // BEGIN android-removed 486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // if (skipped < 0) { 487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // throw new EOFException(); 488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // } 489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // END android-removed 490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return skipped; 491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 493