📄 littleendianinputstream.java
字号:
* implementing the <code>writeInt()</code> method in the * <code>DataOutput</code> interface. * * @return The <code>int</code> value read * * @exception EOFException If end of file is reached before reading the int * @exception IOException If any other error occurs * * @see DataOutput#writeInt */ public int readInt() throws IOException { readFully(buf, 0, 4); return convertToInt(buf); } /** * This method reads the next line of text data from an input * stream. It operates by reading bytes and converting those bytes * to <code>char</code> values by treating the byte read as the low * eight bits of the <code>char</code> and using 0 as the high eight * bits. Because of this, it does not support the full 16-bit * Unicode character set. * <p> * The reading of bytes ends when either the end of file or a line * terminator is encountered. The bytes read are then returned as a * <code>String</code> A line terminator is a byte sequence * consisting of either <code>\r</code>, <code>\n</code> or * <code>\r\n</code>. These termination charaters are discarded and * are not returned as part of the string. * <p> * This method can read data that was written by an object implementing the * <code>writeLine()</code> method in <code>DataOutput</code>. * * @return The line read as a <code>String</code> * * @exception IOException If an error occurs * * @see DataOutput * * @deprecated */ public String readLine() throws IOException { StringBuffer strb = new StringBuffer(); while (true) { int c = in.read(); if (c == -1) // got an EOF return strb.length() > 0 ? strb.toString() : null; if (c == '\r') { int next_c = in.read(); if (next_c != '\n' && next_c != -1) { if (!(in instanceof PushbackInputStream)) in = new PushbackInputStream(in); ((PushbackInputStream) in).unread(next_c); } break; } if (c == '\n') break; strb.append((char) c); } return strb.length() > 0 ? strb.toString() : ""; } /** * This method reads a Java <code>long</code> value from an input stream * It operates by reading eight bytes from the stream and converting them to * a single Java <code>long</code>. The bytes are stored most * significant byte first (i.e., "big endian") regardless of the native * host byte ordering. * <p> * As an example, if <code>byte1</code> through <code>byte8</code> represent * the first eight bytes read from the stream, they will be * transformed to an <code>long</code> in the following manner: * <p> * <code>(long)(((byte1 & 0xFF) << 56) + ((byte2 & 0xFF) << 48) + * ((byte3 & 0xFF) << 40) + ((byte4 & 0xFF) << 32) + * ((byte5 & 0xFF) << 24) + ((byte6 & 0xFF) << 16) + * ((byte7 & 0xFF) << 8) + (byte8 & 0xFF))) * </code> * <p> * The value returned is in the range of -9223372036854775808 to * 9223372036854775807. * <p> * This method can read an <code>long</code> written by an object * implementing the <code>writeLong()</code> method in the * <code>DataOutput</code> interface. * * @return The <code>long</code> value read * * @exception EOFException If end of file is reached before reading the long * @exception IOException If any other error occurs * * @see DataOutput#writeLong */ public long readLong() throws IOException { readFully(buf, 0, 8); return convertToLong(buf); } /** * This method reads a signed 16-bit value into a Java in from the * stream. It operates by reading two bytes from the stream and * converting them to a single 16-bit Java <code>short</code>. The * two bytes are stored most significant byte first (i.e., "big * endian") regardless of the native host byte ordering. * <p> * As an example, if <code>byte1</code> and <code>byte2</code> * represent the first and second byte read from the stream * respectively, they will be transformed to a <code>short</code>. in * the following manner: * <p> * <code>(short)(((byte1 & 0xFF) << 8) | (byte2 & 0xFF))</code> * <p> * The value returned is in the range of -32768 to 32767. * <p> * This method can read a <code>short</code> written by an object * implementing the <code>writeShort()</code> method in the * <code>DataOutput</code> interface. * * @return The <code>short</code> value read * * @exception EOFException If end of file is reached before reading the value * @exception IOException If any other error occurs * * @see DataOutput#writeShort */ public short readShort() throws IOException { readFully(buf, 0, 2); return convertToShort(buf); } /** * This method reads 8 unsigned bits into a Java <code>int</code> * value from the stream. The value returned is in the range of 0 to * 255. * <p> * This method can read an unsigned byte written by an object * implementing the <code>writeUnsignedByte()</code> method in the * <code>DataOutput</code> interface. * * @return The unsigned bytes value read as a Java <code>int</code>. * * @exception EOFException If end of file is reached before reading the value * @exception IOException If any other error occurs * * @see DataOutput#writeByte */ public int readUnsignedByte() throws IOException { return convertToUnsignedByte(in.read()); } /** * This method reads 16 unsigned bits into a Java int value from the stream. * It operates by reading two bytes from the stream and converting them to * a single Java <code>int</code> The two bytes are stored most * significant byte first (i.e., "big endian") regardless of the native * host byte ordering. * <p> * As an example, if <code>byte1</code> and <code>byte2</code> * represent the first and second byte read from the stream * respectively, they will be transformed to an <code>int</code> in * the following manner: * <p> * <code>(int)(((byte1 & 0xFF) << 8) + (byte2 & 0xFF))</code> * <p> * The value returned is in the range of 0 to 65535. * <p> * This method can read an unsigned short written by an object * implementing the <code>writeUnsignedShort()</code> method in the * <code>DataOutput</code> interface. * * @return The unsigned short value read as a Java <code>int</code> * * @exception EOFException If end of file is reached before reading the value * @exception IOException If any other error occurs * * @see DataOutput#writeShort */ public int readUnsignedShort() throws IOException { readFully(buf, 0, 2); return convertToUnsignedShort(buf); } /** * This method attempts to skip and discard the specified number of bytes * in the input stream. It may actually skip fewer bytes than requested. * This method will not skip any bytes if passed a negative number of bytes * to skip. * * @param n The requested number of bytes to skip. * * @return The requested number of bytes to skip. * * @exception IOException If an error occurs. * @specnote The JDK docs claim that this returns the number of bytes * actually skipped. The JCL claims that this method can throw an * EOFException. Neither of these appear to be true in the JDK 1.3's * implementation. This tries to implement the actual JDK behaviour. */ public int skipBytes(int n) throws IOException { if (n <= 0) return 0; try { return (int) in.skip(n); } catch (EOFException x) { // do nothing. } return n; } protected boolean convertToBoolean(int b) throws EOFException { if (b < 0) throw new EOFException(); return (b != 0); } protected byte convertToByte(int i) throws EOFException { if (i < 0) throw new EOFException(); return (byte) i; } protected int convertToUnsignedByte(int i) throws EOFException { if (i < 0) throw new EOFException(); return (i & 0xFF); } /** * Less significant byte first. */ protected char convertToChar(byte[] buf) { return (char) ((buf [ 1 ] << 8) | (buf [ 0 ] & 0xff)); } /** * Less significant byte first. */ protected short convertToShort(byte[] buf) { return (short) ((buf [ 1 ] << 8) | (buf [ 0 ] & 0xff)); } /** * Less significant byte first. */ protected int convertToUnsignedShort(byte[] buf) { return (((buf [ 1 ] & 0xff) << 8) | (buf [ 0 ] & 0xff)); } /** * Less significant byte first. */ protected int convertToInt(byte[] buf) { return (((buf [ 3 ] & 0xff) << 24) | ((buf [ 2 ] & 0xff) << 16) | ((buf [ 1 ] & 0xff) << 8) | (buf [ 0 ] & 0xff)); } /** * Less significant byte first. */ protected long convertToLong(byte[] buf) { return (((long) (buf [ 7 ] & 0xff) << 56) | ((long) (buf [ 6 ] & 0xff) << 48) | ((long) (buf [ 5 ] & 0xff) << 40) | ((long) (buf [ 4 ] & 0xff) << 32) | ((long) (buf [ 3 ] & 0xff) << 24) | ((long) (buf [ 2 ] & 0xff) << 16) | ((long) (buf [ 1 ] & 0xff) << 8) | ((long) (buf [ 0 ] & 0xff))); } /** * This should never be called. * * @throws InternalError, always. */ public String readUTF() { throw new InternalError(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -