DataInputStream和DataOutputStream属于过滤流,使用节点流作为输入或输出。
过滤流是使用一个已经存在的输入流或输出流连接创建的。
它提供了读写Java中的基本数据类型的功能。
DatainputStream部分源码:
// 从“数据输入流”中读取boolean类型的值
public final boolean readBoolean() throws IOException {
int ch = in.read();
if (ch < 0)
throw new EOFException();
return (ch != 0);
}
// 从“数据输入流”中读取Byte类型的值
public final byte readByte() throws IOException {
int ch = in.read();
if (ch < 0)
throw new EOFException();
return (byte)(ch);
}
// 从“数据输入流”中读取“无符号的Byte类型”的值,即读取值为正数的byte值
public final int readUnsignedByte() throws IOException {
int ch = in.read();
if (ch < 0)
throw new EOFException();
return ch;
}
// 从“数据输入流”中读取“short类型”的值
public final short readShort() throws IOException {
int ch1 = in.read();
int ch2 = in.read();
if ((ch1 | ch2) < 0)
throw new EOFException();
return (short)((ch1 << 8) + (ch2 << 0));
}
// 从“数据输入流”中读取“无符号的short类型”的值
public final int readUnsignedShort() throws IOException {
int ch1 = in.read();
int ch2 = in.read();
if ((ch1 | ch2) < 0)
throw new EOFException();
return (ch1 << 8) + (ch2 << 0);
}
// 从“数据输入流”中读取“char类型”的值
public final char readChar() throws IOException {
int ch1 = in.read();
int ch2 = in.read();
if ((ch1 | ch2) < 0)
throw new EOFException();
return (char)((ch1 << 8) + (ch2 << 0));
}
// 从“数据输入流”中读取“int类型”的值
public final int readInt() throws IOException {
int ch1 = in.read();
int ch2 = in.read();
int ch3 = in.read();
int ch4 = in.read();
if ((ch1 | ch2 | ch3 | ch4) < 0)
throw new EOFException();
return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0));
}
private byte readBuffer[] = new byte[8];
// 从“数据输入流”中读取“long类型”的值
public final long readLong() throws IOException {
readFully(readBuffer, 0, 8);
return (((long)readBuffer[0] << 56) +
((long)(readBuffer[1] & 255) << 48) +
((long)(readBuffer[2] & 255) << 40) +
((long)(readBuffer[3] & 255) << 32) +
((long)(readBuffer[4] & 255) << 24) +
((readBuffer[5] & 255) << 16) +
((readBuffer[6] & 255) << 8) +
((readBuffer[7] & 255) << 0));
}
// 从“数据输入流”中读取“float类型”的值
public final float readFloat() throws IOException {
return Float.intBitsToFloat(readInt());
}
// 从“数据输入流”中读取“double类型”的值
public final double readDouble() throws IOException {
return Double.longBitsToDouble(readLong());
}
------------------------------------------------------------------------------------------------------
如果你根本不关心你读取结果的类型,那你使用过滤流不就是做了许多无用的操作,你懂的:) |