📄 dataoutputstream.java
字号:
* the high byte written first in the following manner: * <p> * <code>byte0 = (byte)((value & 0xFF000000) >> 24);<br> * byte1 = (byte)((value & 0x00FF0000) >> 16);<br> * byte2 = (byte)((value & 0x0000FF00) >> 8);<br> * byte3 = (byte)(value & 0x000000FF);</code> * <p> * * The value written can be read using the <code>readInt</code> * method in <code>DataInput</code>. * * @param value The <code>int</code> value to write to the stream * * @exception IOException If an error occurs * * @see DataInput#readInt */ public final synchronized void writeInt (int value) throws IOException { write ((byte) (0xff & (value >> 24))); write ((byte) (0xff & (value >> 16))); write ((byte) (0xff & (value >> 8))); write ((byte) (0xff & value)); } /** * This method writes a Java long value to an output stream. The 8 bytes * of the passed value will be written "big endian". That is, with * the high byte written first in the following manner: * <p> * <code>byte0 = (byte)((value & 0xFF00000000000000L) >> 56);<br> * byte1 = (byte)((value & 0x00FF000000000000L) >> 48);<br> * byte2 = (byte)((value & 0x0000FF0000000000L) >> 40);<br> * byte3 = (byte)((value & 0x000000FF00000000L) >> 32);<br> * byte4 = (byte)((value & 0x00000000FF000000L) >> 24);<br> * byte5 = (byte)((value & 0x0000000000FF0000L) >> 16);<br> * byte6 = (byte)((value & 0x000000000000FF00L) >> 8);<br> * byte7 = (byte)(value & 0x00000000000000FFL);</code> * <p> * * The value written can be read using the <code>readLong</code> * method in <code>DataInput</code>. * * @param value The <code>long</code> value to write to the stream * * @exception IOException If an error occurs * * @see DataInput#readLong */ public final synchronized void writeLong (long value) throws IOException { write ((byte) (0xff & (value >> 56))); write ((byte) (0xff & (value>> 48))); write ((byte) (0xff & (value>> 40))); write ((byte) (0xff & (value>> 32))); write ((byte) (0xff & (value>> 24))); write ((byte) (0xff & (value>> 16))); write ((byte) (0xff & (value>> 8))); write ((byte) (0xff & value)); } /** * This method writes a Java <code>float</code> value to the stream. This * value is written by first calling the method * <code>Float.floatToIntBits</code> * to retrieve an <code>int</code> representing the floating point number, * then writing this <code>int</code> value to the stream exactly the same * as the <code>writeInt()</code> method does. * * The value written can be read using the <code>readFloat</code> * method in <code>DataInput</code>. * * @param value The <code>float</code> value to write to the stream * * @exception IOException If an error occurs * * @see #writeInt(int) * @see DataInput#readFloat * @see Float#floatToIntBits */ public final void writeFloat (float value) throws IOException { writeInt (Float.floatToIntBits (value)); } /** * This method writes a Java <code>double</code> value to the stream. This * value is written by first calling the method * <code>Double.doubleToLongBits</code> * to retrieve an <code>long</code> representing the floating point number, * then writing this <code>long</code> value to the stream exactly the same * as the <code>writeLong()</code> method does. * * The value written can be read using the <code>readDouble</code> * method in <code>DataInput</code>. * * @param value The <code>double</code> value to write to the stream * * @exception IOException If an error occurs * * @see #writeLong(long) * @see DataInput#readDouble * @see Double#doubleToLongBits */ public final void writeDouble (double value) throws IOException { writeLong (Double.doubleToLongBits (value)); } /** * This method writes all the bytes in a <code>String</code> out to the * stream. One byte is written for each character in the * <code>String</code>. * The high eight bits of each character are discarded, thus this * method is inappropriate for completely representing Unicode characters. * * @param value The <code>String</code> to write to the stream * * @exception IOException If an error occurs */ public final void writeBytes (String value) throws IOException { int len = value.length(); for (int i = 0; i < len; ++i) writeByte (value.charAt(i)); } /** * This method writes all the characters of a <code>String</code> to an * output stream as an array of <code>char</code>'s. Each character * is written using the method specified in the <code>writeChar</code> * method. * * @param value The <code>String</code> to write to the stream * * @exception IOException If an error occurs * * @see #writeChar(char) */ public final void writeChars (String value) throws IOException { int len = value.length(); for (int i = 0; i < len; ++i) writeChar (value.charAt(i)); } /** * This method writes a Java <code>String</code> to the stream in a modified * UTF-8 format. First, two bytes are written to the stream indicating the * number of bytes to follow. Note that this is the number of bytes in the * encoded <code>String</code> not the <code>String</code> length. Next * come the encoded characters. Each character in the <code>String</code> * is encoded as either one, two or three bytes. For characters in the * range of <code>\u0001</code> to <\u007F>, one byte is used. The character * value goes into bits 0-7 and bit eight is 0. For characters in the range * of <code>\u0080</code> to <code>\u007FF</code>, two bytes are used. Bits * 6-10 of the character value are encoded bits 0-4 of the first byte, with * the high bytes having a value of "110". Bits 0-5 of the character value * are stored in bits 0-5 of the second byte, with the high bits set to * "10". This type of encoding is also done for the null character * <code>\u0000</code>. This eliminates any C style NUL character values * in the output. All remaining characters are stored as three bytes. * Bits 12-15 of the character value are stored in bits 0-3 of the first * byte. The high bits of the first bytes are set to "1110". Bits 6-11 * of the character value are stored in bits 0-5 of the second byte. The * high bits of the second byte are set to "10". And bits 0-5 of the * character value are stored in bits 0-5 of byte three, with the high bits * of that byte set to "10". * * The value written can be read using the <code>readUTF</code> * method in <code>DataInput</code>. * * @param value The <code>String</code> to write to the output in UTF format * * @exception IOException If an error occurs * * @see DataInput#readUTF */ public final synchronized void writeUTF(String value) throws IOException { int len = value.length(); int sum = 0; for (int i = 0; i < len && sum <= 65535; ++i) { char c = value.charAt(i); if (c >= '\u0001' && c <= '\u007f') sum += 1; else if (c == '\u0000' || (c >= '\u0080' && c <= '\u07ff')) sum += 2; else sum += 3; } if (sum > 65535) throw new UTFDataFormatException (); int pos = 0; byte[] buf = new byte[sum]; for (int i = 0; i < len; ++i) { char c = value.charAt(i); if (c >= '\u0001' && c <= '\u007f') buf[pos++] = (byte) c; else if (c == '\u0000' || (c >= '\u0080' && c <= '\u07ff')) { buf[pos++] = (byte) (0xc0 | (0x1f & (c >> 6))); buf[pos++] = (byte) (0x80 | (0x3f & c)); } else { // JSL says the first byte should be or'd with 0xc0, but // that is a typo. Unicode says 0xe0, and that is what is // consistent with DataInputStream. buf[pos++] = (byte) (0xe0 | (0x0f & (c >> 12))); buf[pos++] = (byte) (0x80 | (0x3f & (c >> 6))); buf[pos++] = (byte) (0x80 | (0x3f & c)); } } writeShort (sum); write(buf, 0, sum); }} // class DataOutputStream
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -