您的位置:首页 > 编程语言 > Java开发

(一)java.io.DataInput接口及源码详解

2018-02-13 18:11 351 查看
简介:java.io.DataInput接口提供用于读取二进制流字节并重建为任何java原始数据类型,也提供了一个转换为UTF-8编码的字符串类型方法;

一般来说,这个接口的所有读取方法都是正确的,如果在读取所需字节数之前到达文件末尾,将会抛出EOFException(也就是IOException异常的一种)异常。如果除了到达文件末尾不能读取字节的原因,不会抛出IOException 异常而会抛出EOFException异常,特别的,如果输入流被关闭了一个IOException异常将会抛出。

接口方法分析

/**从输入流中读取一些字节并存入缓冲字节数组b中,读取的字节数等于数组b的长度,
* 此方法阻塞,直到下列情况之一发生:
* b.length输入的字节是可用的,在这种情况下正常返回;
* 文件结束检测,在这种情况下将会抛出EOFException异常;
* I/O错误发生,在这种情况下将会抛出IOExcetpion而不会抛出EOFException
*/
void readFully(byte b[]) throws IOException;


/**
* 从输入流中读取len个字节
*  此方法阻塞,知道下列情况之一发生:
*  输入的len个字节数据是可用的,在这种情况下正常返回;
*  文件结束检测,在这种情况下将会抛出EOFException异常;
*  I/O错误发生,在这种情况下将会抛出IOExcetpion而不会抛出EOFException
*/
void readFully(byte b[], int off, int len) throws IOException;


/**
* 尝试跳过来自输入流的n个字节数据,丢弃跳过的字节,但是,他可能跳过一些较小的字节数,可能为0个,
* 这可能是由许多条件引起的;在跳过n个字节之前到达文件的结尾只有一种可能性,这个方法不会抛出EOFException异常,
* 将会返回实际跳过的字节数。
*/
int skipBytes(int n) throws IOException


/**
* 读取一个输入字节,如果这个字节非0,就返回true,如果是0返回false,
* 这种方法适用于读取字节的数据输出的接口writeboolean写的方法
*/
boolean readBoolean() throws IOException;


/**
* 读取并返回一个输入字节,在-128到127之间,字节被视为有符号值,包括,
* 这种方法适用于读取接口DataOutput的writeByte方法写入的字节;
*
*/
byte readByte() throws IOException;


/**
* 读取一个输入字节,0将其扩展到int,并返回结果,因此在0到255的范围内,
* 这个方法适用于读取接口DataOutput的writeByte方法写入的字节;
*
*/
int readUnsignedByte() throws IOException;


/**
* 读取两个输入字节,并返回一个short类型值,如果第一个读取字节是a,第二个读取字节是b,
* 那么返回的值是(short)((a << 8) | (b & 0xff));
* 这个方法适合读取DataOutput接口的writeShort方法写入的数据;
*/
short readShort() throws IOException;


/**
* 读取两个输入字节,并在0到65535范围内返回int值;让第一个读取的字节是a,第二个读取的字节是b,返回的值是:
* (((a & 0xff) << 8) | (b & 0xff))
* 这个方法适合读取接口DataOutput的writeShort方法写入的数据,如果方法writeShort写入的数据是在0到65535之间,
* 返回一个未签名的16位值;
*/
int readUnsignedShort() throws IOException;


/**
* 读取两个字节并返回一个char类型值,a做为第一个读取的字节,b做为第二个读取字节,结果将会返回
* (char)((a << 8) | (b & 0xff))
* 该方法将会适合读取DataOutput接口的writeChar方法写入的数据,返回一个char类型数据;
*/
char readChar() throws IOException;


/**
* 读取四个输入字节并返回一个int值,让a-d做为读取的字节,将会返回
*  (((a & 0xff) << 24) | ((b & 0xff) << 16) | ((c & 0xff) << 8) | (d & 0xff))
* 该方法适合读取接口DataOutput的writeInt方法写入的数据;
* 返回读取到的int值;
*/
int readInt() throws IOException;


/**
* 读取八个输入字节并返回一个long数据,让a-h做为读取到的八个字节,结果将会返回
*  (((long)(a & 0xff) << 56) |
*  ((long)(b & 0xff) << 48) |
*  ((long)(c & 0xff) << 40) |
*  ((long)(d & 0xff) << 32) |
*  ((long)(e & 0xff) << 24) |
*  ((long)(f & 0xff) << 16) |
*  ((long)(g & 0xff) <<  8) |
*  ((long)(h & 0xff)))
* 该方法适合读取接口DataOutput的writeLong方法;
* 返回一个long类型数据;
*/
long readLong() throws IOException;


/**
* 读取四个输入字节并返回一个float类型数据,这是通过首先在完全的readInt方法构建一个int值的方式,
* 然后以该方法Float.intBitsToFloat将这个int值转换为浮点数;这个方式适合读取接口DataOutput的writeFloat方法
* 写入的数据,最后返回一个float值;
*/
float readFloat() throws IOException;


/**
* 读取八个输入字节并返回一个double数据类型,首先会构建一个long类型的数据,确切的说就是使用readLong方法,
* 然后将这个long数据转换为double类型使用Double.longBitsToDouble方法;
* 这个方法适合读取接口DataOutput的writeDouble方法写入的数据;
* 返回一个double类型数据
*/
double readDouble() throws IOException;


/**
* 从输入流读取下一行文本,它读取连续字节,将每个字节分别转换为字符,直到遇到行终止符或文件结束符为止;
* 然后将读取到的字符作为字符串返回。注意,因为该方法处理的是字节,所以它不支持完整的unicode字符集的输入。
* 如果在读取一个字节之前遇到文件结尾,将会返回null,否则,每个读取到的字节被转化成字符char。如果遇到字符‘\n’,
* 这个将会被丢弃,并停止读取;如果遇到字符‘\r’,它将会被丢弃,如果读取到的字节转换为字符‘\n’,
* 这样将会被丢弃,并继续读取;如果在遇到字符‘\n’和‘\r’之前遇到文件结尾,继续读取,一旦阅读停止,
* 将会返回所有读取到未被丢弃的字符作为字符串返回,依次采取。请注意,此字符串中的每个字符都有一个值小于\ u0100,
* 即(炭)256。
*/
String readLine() throws IOException;


/**
* 读取一个字符串,已使用修改后的UTF-8编码格式。然后这些字符将会作为字符串返回,
*
*/
String readUTF() throws IOException;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: