栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java DataInput源码总结 DataInput源码注释翻译和解析中英文对照版

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java DataInput源码总结 DataInput源码注释翻译和解析中英文对照版

版本
JDK8(JDK1.8)

DataInput接口源码重点
1.DataInput接口提供了从二进制流中读取字节并从中重构任何Java类型的数据的功能,与之对应的是DataOutput,DataOutput接口定义了一系列方法用于将任何Java类型的数据转换为一系列字节,并将这些字节写入二进制Data

DataOutput源码可以看我这篇文章 DataOutput

2.DataInput接口的 void readFully(byte b[]) 方法是一个会阻塞方法,一直阻塞到从二进制流中读取字节填满传入的字节数组b[]才返回

3.DataInput接口的String readUTF() 读取修改的UTF-8格式编码,这种修改的UTF-8格式编码每个字符用1-3个字节表示,读取流程是先读取两个字节,并使用它们以该接口的readUnsignedShort方法的方式构造一个无符号16位整数。 此整数值称为该UTF-8字符串的长度,所以最长能读取65536(2的16次方)个字符,之后就是读取字符了,每个字符对应一个分组(分组指的是1到3个字节),该分组的第一个字节指示该分组的长度,即该字符是由几个字节组成,规则如下

  • 如果组的第一个字节与位模式0xxxxxxx(其中x表示“可能是0或1”)匹配,则组仅由该字节组成
  • 如果组的第一个字节与位模式110xxxxx匹配, 则该组由该字节a和第二个字节b组成,如果没有字节b,或者如果字节b与位模式10xxxxxx不匹配,则会抛出UTFDataFormatException,否则,组将转换为字符
  • 如果组的第一个字节与位模式 1110xxxx匹配, 则该组由该字节a和另外两个字节b和c组成, 如果没有字节c, 或者字节b或字节c与位模式10xxxxxx不匹配,则抛出UTFDataFormatException, 否则,组将转换为字符

4.DataInput接口的方法

方法名作用
void readFully(byte b[])从输入流读取一些字节并将它们存储到缓冲区数组b,读取的字节数等于b的长度,没有填满数组b会阻塞
void readFully(byte b[], int off, int len)从输入流读取len字节,从偏移量off处开始填入数组b(即从b的off索引处开始填充),必须填满len个字节,在填满之前会阻塞
int skipBytes(int n)尝试从输入流中跳过n个字节的数据,丢弃跳过的字节,返回跳过的实际字节数,可能跳过比预期少的字节(因为到文件末尾)
boolean readBoolean()读取一个输入字节,如果该字节为非零,则返回true,如果该字节为零,则返回false
byte readByte()读取并返回一个输入字节。该字节被视为-128到127范围内的有符号值
int readUnsignedByte()读取一个输入字节,无视符号将其扩展为类型int,并返回结果,因此其范围在0到255之间
short readShort()读取两个输入字节并返回short值,即读取的第一个字节为高8位,第二个字节为低8位
int readUnsignedShort()读取两个输入字节并返回范围为0到65535的int值
char readChar()读取两个输入字节并返回char值(内码中一个char占两个字节,内码定义可以看我DataOutput文章)
int readInt()读取四个输入字节并返回一个int值,先读取高位字节,再读取低位字节
long readLong()读取八个输入字节并返回一个long值
float readFloat()读取四个输入字节并返回一个float值
double readDouble()读取八个输入字节并返回一个double值
String readLine()从输入流中读取下一行文本,它读取连续的字节,将每个字节分别转换为一个字符,直到遇到行终止符或文件结尾,由于一个字节对应一个字符,所以不支持输入完整的Unicode字符集
String readUTF()读取使用修改的UTF-8格式编码存储的字符串

DataInput接口源码

package java.io;


public
interface DataInput {
    
    // 把给定的数组b全部填满才返回
    void readFully(byte b[]) throws IOException;

    
    // 从off偏移量开始填充len个字节到给定数组中才返回,没有填充到len个字节之前会阻塞
    void readFully(byte b[], int off, int len) throws IOException;

    
    int skipBytes(int n) throws IOException;

    
    boolean readBoolean() throws IOException;

    
    byte readByte() throws IOException;

    
    int readUnsignedByte() throws IOException;

    
    short readShort() throws IOException;

    
    int readUnsignedShort() throws IOException;

    
    char readChar() throws IOException;

    
    int readInt() throws IOException;

    
    long readLong() throws IOException;

    
    float readFloat() throws IOException;

    
    double readDouble() throws IOException;

    
    String readLine() throws IOException;

    
    String readUTF() throws IOException;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/314236.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号