接口 DataInput

java.io

接口 DataInput

所有已知子接口:
ImageInputStream, ImageOutputStream, ObjectInput
所有已知实现类:
DataInputStream, FileCacheImageInputStream, FileCacheImageOutputStream, FileImageInputStream, FileImageOutputStream, ImageInputStreamImpl, ImageOutputStreamImpl, MemoryCacheImageInputStream, MemoryCacheImageOutputStream, ObjectInputStream, RandomAccessFile

public interface DataInput
 

DataInput 接口用于从二进制流中读取字节,并根据所有 Java 基本类型数据进行重构。同时还提供根据 UTF-8 修改版格式的数据重构 String 的工具。

对于此接口中的所有数据读取例程来说,如果在读取所需字节数之前已经到达文件末尾 (end of file),则将抛出 EOFExceptionIOException 的一种)。如果因为到达文件末尾以外的其他原因无法读取字节,则将抛出 IOException 而不是 EOFException。尤其是,在输入流已关闭的情况下,将抛出 IOException

UTF-8 修改版

DataInput 和 DataOutput 接口的实现表示稍作改版的 UTF-8 格式的 Unicode 字符串。(关于标准 UTF-8 格式的信息,请参阅 The Unicode Standard, Version 4.03.9 Unicode Encoding Forms 节)。注意,在下表中,最高有效位显示在最左边的列中。

'\u0001''\u007F' 范围内的所有字符都是用单个字节表示的:

 位值
字节 1
0
位 6-0

null 字符 '\u0000' 以及从 '\u0080''\u07FF' 的范围内的字符用两个字节表示:

 位值
字节 1
1
1
0
位 10-6
字节 2
1
0
位 5-0


'\u0800''\uFFFF' 范围内的 char 值用三个字节表示:

 位值
字节 1
1
1
1
0
位 15-12
字节 2
1
0
位 11-6
字节 3
1
0
位 5-0

这种格式与标准 UTF-8 格式之间的不同如下:

  • null 字节 '\u0000' 是用 2-byte 格式而不是 1-byte 格式编码的,因此已编码的字符串中决不会有嵌入的 null。
  • 仅使用 1-byte、2-byte 和 3-byte 格式。
  • 增补字符是以代理项对的形式表示的。

 

从以下版本开始:
JDK1.0

方法摘要
 booleanreadBoolean()
          读取一个输入字节,如果该字节不是零,则返回 true如果是零,则返回 false
 bytereadByte()
          读取并返回一个输入字节。
 charreadChar()
          读取两个输入字节并返回一个 char 值。
 doublereadDouble()
          读取八个输入字节并返回一个 double 值。
 floatreadFloat()
          读取四个输入字节并返回一个 float 值。
 voidreadFully(byte[] b)
          从输入流中读取一些字节,并将它们存储在缓冲区数组 b 中。
 voidreadFully(byte[] b, int off, int len)
          从输入流中读取 len 个字节。
 intreadInt()
          读取四个输入字节并返回一个 int 值。
 StringreadLine()
          从输入流中读取下一文本行。
 longreadLong()
          读取八个输入字节并返回一个 long 值。
 shortreadShort()
          读取两个输入字节并返回一个 short 值。
 intreadUnsignedByte()
          读取一个输入字节,将它左侧补零 (zero-extend) 转变为 int 类型,并返回结果,所以结果的范围是 0255
 intreadUnsignedShort()
          读取两个输入字节,并返回 065535 范围内的一个 int 值。
 StringreadUTF()
          读入一个已使用 UTF-8 修改版格式编码的字符串。
 intskipBytes(int n)
          试图在输入流中跳过数据的 n 个字节,并丢弃跳过的字节。

 

方法详细信息

readFully

void readFully(byte[] b)throws IOException
从输入流中读取一些字节,并将它们存储在缓冲区数组 b 中。读取的字节数等于 b 的长度。

在出现以下条件之一以前,此方法将一直阻塞:

  • 输入数据的 b.length 个字节是可用的,在这种情况下,正常返回。
  • 检测到文件末尾,在这种情况下,抛出 EOFException
  • 发生 I/O 错误,在这种情况下,将抛出 IOException,而不是 EOFException

如果 bnull,则抛出 NullPointerException。如果 b.length 为零,则不读取字节。否则,将读取的第一个字节存储到元素 b[0] 中,下一个字节存储到 b[1] 中,依此类推。如果此方法抛出异常,则可能是因为已经用输入流中的数据更新了 b 的某些(但非全部)字节。

 

参数:
b - 存储读取数据的缓冲区。
抛出:
EOFException - 如果此流在读取所有字节之前到达末尾。
IOException - 如果发生 I/O 错误。

readFully

void readFully(byte[] b, int off, int len)  throws IOException

从输入流中读取 len 个字节。

在出现以下条件之一以前,此方法将一直阻塞:

 

  • 输入数据的 len 个字节是可用的,在这种情况下,正常返回。
  • 检测到文件末尾,在这种情况下,抛出 EOFException
  • 如果发生 I/O 错误,在这种情况下,将抛出 IOException,而不是 EOFException

如果 bnull,则抛出 NullPointerException。如果 off 为负,或 len 为负,或者 off+len 大于数组 b 的长度,则抛出 IndexOutOfBoundsException。如果 len 为零,则不读取字节。否则,将读取的第一个字节存储到元素 b[off] 中,下一个字节存储到 b[off+1] 中,依此类推。读取的字节数至多等于 b[0]

 

参数:
b - 存储读取数据的缓冲区。
off - 指定数据中的偏移量的 int 值。
len - 指定读取的字节数的 int 值。
抛出:
EOFException - 如果此流在读取所有字节之前到达末尾。
IOException - 如果发生 I/O 错误。

skipBytes

int skipBytes(int n) throws IOException
试图在输入流中跳过数据的 n 个字节,并丢弃跳过的字节。不过,可以跳过更少的字节数,该字节数甚至可以为零。这可能由很多情况引起;在已经跳过 n 个字节前到达文件末尾只是其中的一种可能。此方法从不抛出 EOFException返回实际跳过的字节数。

 

参数:
n - 要跳过的字节数。
返回:
实际跳过的字节数。
抛出:
IOException - 如果发生 I/O 错误。

readBoolean

boolean readBoolean() throws IOException
读取一个输入字节,如果该字节不是零,则返回 true,如果是零,则返回 false。此方法适用于读取用接口 DataOutputwriteBoolean 方法写入的字节。

 

返回:
读取的 boolean 值。
抛出:
EOFException - 如果此流在读取所有字节之前到达末尾。
IOException - 如果发生 I/O 错误。

readByte

byte readByte() throws IOException
读取并返回一个输入字节。该字节被看作是 -128127(包含)范围内的一个有符号值。此方法适用于读取用接口 DataOutputwriteByte 方法写入的字节。

 

返回:
读取的 8 位值。
抛出:
EOFException - 如果此流在读取所有字节之前到达末尾。
IOException - 如果发生 I/O 错误。

readUnsignedByte

int readUnsignedByte() throws IOException
读取一个输入字节,将它左侧补零 (zero-extend) 转变为 int 类型,并返回结果,所以结果的范围是 0255如果接口 DataOutputwriteByte 方法的参数是 0255 之间的值,则此方法适用于读取用 writeByte 写入的字节。

 

返回:
读取的无符号 8 位值。
抛出:
EOFException - 如果此流在读取所有字节之前到达末尾。
IOException - 如果发生 I/O 错误。

readShort

short readShort() throws IOException
读取两个输入字节并返回一个 short 值。设 a 为第一个读取字节,b 为第二个读取字节。返回的值是:

 

(short)((a << 8) | (b & 0xff))
此方法适用于读取用接口 DataOutputwriteShort 方法写入的字节。

 

返回:
读取的 16 位值。
抛出:
EOFException - 如果此流在读取所有字节之前到达末尾。
IOException - 如果发生 I/O 错误。

readUnsignedShort

int readUnsignedShort() throws IOException
读取两个输入字节,并返回 065535 范围内的一个 int 值。设 a 为第一个读取字节,b 为第二个读取字节。返回的值是:

 

(((a & 0xff) << 8) | (b & 0xff))
如果接口 DataOutputwriteShort 方法的参数是 065535 范围内的值,则此方法适用于读取用 writeShort 写入的字节。

 

返回:
读取的无符号 16 位值。
抛出:
EOFException - 如果此流在读取所有字节之前到达末尾。
IOException - 如果发生 I/O 错误。

readChar

char readChar() throws IOException
读取两个输入字节并返回一个 char 值。设 a 为第一个读取字节,b 为第二个读取字节。返回的值是:

 

(char)((a << 8) | (b & 0xff))
 
此方法适用于读取用接口 DataOutputwriteChar 方法写入的字节。

 

返回:
读取的 char 值。
抛出:
EOFException - 如果此流在读取所有字节之前到达末尾。
IOException - 如果发生 I/O 错误。

readInt

int readInt()  throws IOException
读取四个输入字节并返回一个 int 值。设 a-d 为四个读取字节中的第一个字节。返回的值是:

 

 (((a & 0xff) << 24) | ((b & 0xff) << 16) |((c & 0xff) << 8) | (d & 0xff))
此方法适用于读取用接口 DataOutputwriteInt 方法写入的字节。

 

返回:
读取的 int 值。
抛出:
EOFException - 如果此流在读取所有字节之前到达末尾。
IOException - 如果发生 I/O 错误。

readLong

long readLong() 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)))
 

此方法适用于读取用接口 DataOutputwriteLong 方法写入的字节。

 

返回:
读取的 long 值。
抛出:
EOFException - 如果此流在读取所有字节之前到达末尾。
IOException - 如果发生 I/O 错误。

readFloat

float readFloat() throws IOException
读取四个输入字节并返回一个 float 值。实现这一点的方法是:先使用与 readInt 方法完全相同的方式构造一个 int然后使用与 Float.intBitsToFloat 方法完全相同的方式将此 int 值转换成一个 float 值。此方法适用于读取用接口 DataOutputwriteFloat 方法写入的字节。

 

返回:
读取的 float 值。
抛出:
EOFException - 如果此流在读取所有字节之前到达末尾。
IOException - 如果发生 I/O 错误。

readDouble

double readDouble() throws IOException
读取八个输入字节并返回一个 double 值。实现这一点的方法是:先使用与 readlong 方法完全相同的方式构造一个 long 值,然后使用与 Double.longBitsToDouble 方法完全相同的方式将此 long 值转换成一个 double 值。此方法适用于读取用接口 DataOutputwriteDouble 方法写入的字节。

 

返回:
读取的 double 值。
抛出:
EOFException - 如果此流在读取所有字节之前到达末尾。
IOException - 如果发生 I/O 错误。

readLine

String readLine() throws IOException
从输入流中读取下一文本行。该方法读取连续的字节,将每个字节分别转换成一个字符,直到遇到行结尾符或到达末尾;然后以 String 形式返回读取的字符。注意,因为此方法用于处理字符,所以它不支持整个 Unicode 字符集的输入

如果在一个字节都没有读取的时候就到达文件末尾,则返回 null。否则,通过左侧补零将读取的每个字节转换成 char 类型的值。如果遇到字符 '\n',则丢弃它并且停止读取。如果遇到字符 '\r' 则丢弃它如果后续字节转变成字符 '\n',则同样丢弃它并停止读取。如果在遇到字符 '\n''\r' 之一前到达文件末尾,则停止读取。一旦已停止读取,则返回一个 String,它按顺序包含所有已读取且未丢弃的字符。注意,此字符串中的每个字符的值都将小于 \u0100(即 (char)256)的值。

 

返回:
输入流中文本的下一行,如果还没有读取一个字节就到达文件末尾,则返回 null
抛出:
IOException - 如果发生 I/O 错误。

readUTF

String readUTF() throws IOException
读入一个已使用 UTF-8 修改版格式编码的字符串。readUTF 的常规协定是:该方法读取使用 UTF-8 修改版格式编码的 Unicode 字符串的表示形式;然后以 String 的形式返回此字符串。

首先读取两个字节,并使用它们构造一个无符号 16 位整数,构造方式与 readUnsignedShort 方法的方式完全相同。该整数值被称为 UTF 长度,它指定要读取的额外字节数。然后成组地将这些字节转换为字符。每组的长度根据该组第一个字节的值计算。紧跟在某个组后面的字节(如果有)是下一组的第一个字节。

如果组的第一个字节与位模式 0xxxxxxx(其中 x 表示“可能为 01”)匹配,则该组只有这一个字节。该字节被左侧补零,转换成一个字符。

如果组的第一个字节与位模式 110xxxxx 匹配,则该组只由字节 a 和另一个字节 b 组成。如果没有字节 b(因为字节 a 是要读取的最后一个字节),或者字节 b 与位模式 10xxxxxx 不匹配,则抛出 UTFDataFormatException。否则,将该组转换成字符:

 

(char)(((a& 0x1F) << 6) | (b & 0x3F))
如果组的第一个字节与位模式 1110xxxx 匹配,则该组由字节 a 和另外两个字节 bc 组成。如果没有字节 c(因为字节 a 是要读取的最后两个字节之一),或者字节 b 或字节 c 与位模式 10xxxxxx 不匹配,则抛出 UTFDataFormatException。否则,将该组转换成字符:
 (char)(((a & 0x0F) << 12) | ((b & 0x3F) << 6) | (c & 0x3F))
如果组的第一个字节与模式 1111xxxx 或模式 10xxxxxx 匹配,则抛出 UTFDataFormatException

如果在执行整个过程中的任意时间到达文件末尾,则抛出 EOFException

在通过此过程将每个组转换成字符后,按照从输入流中读取相应组的顺序,将这些字符收集在一起,形成一个 String,然后该字符串将被返回。

可以使用 DataOutput 接口的 writeUTF 方法写入适合此方法读取的数据。

 

返回:
一个 Unicode 字符串。
抛出:
EOFException - 如果此流在读取所有字节之前到达末尾。
IOException - 如果发生 I/O 错误。
UTFDataFormatException - 如果这些字节不表示一个有效的、UTF-8 修改版编码的字符串。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331649.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java反射机制总结

【0】README 0.1&#xff09;以下内容转自&#xff1a; http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html 0.2&#xff09;for source code, please visit &#xff08;1~14 source code : https://github.com/pacosonTang/core-java-volume/blob/master…

c语言系统时间的作用,C语言得到当前系统时间

void getTime(){//获取当前系统时间time_t tTime;//距离1900年1月1日的秒数char str[80];struct tm* stTim;//时间结构time(&tTime);stTim localtime(&tTime);strftime(str,sizeof(str),"%Y%m%d%T",stTim);//格式化时间printf(str);}格式化时间的格式%a 星期…

aws集群重启_使用自动伸缩组在AWS中运行安全数据库集群

aws集群重启当您必须在AWS上运行可扩展应用程序时&#xff0c;您的数据库也必须是可扩展的。 扩展无状态应用程序层更容易&#xff0c;在无状态应用程序层中&#xff0c;每个节点几乎都是一次性的-即使3节点集群中的一个节点发生故障&#xff0c;您也可以启动另一个节点&#x…

接口 DataOutput

java.io 接口 DataOutput 所有已知子接口&#xff1a; ImageOutputStream, ObjectOutput 所有已知实现类&#xff1a; DataOutputStream, FileCacheImageOutputStream, FileImageOutputStream, ImageOutputStreamImpl, MemoryCacheImageOutputStream, ObjectOutputStream, Rand…

java流与文件——流

【0】README 0.1&#xff09; 本文描述转自 core java volume 2&#xff0c; 旨在理解 java流与文件——流 的相关知识&#xff1b; 0.2&#xff09; 输入流和输出流&#xff08;InputStream 和 OutputStream传输单位是基于单字节&#xff09;&#xff1a; 0.2.1&#xff09…

c语言结构体定义字符串数组,C语言,结构体中字符串的声明(采用字符指针还是字符数组)...

结构体中&#xff0c;字符串选项是用字符数组表示好&#xff0c;还是用字符指针表示好&#xff1f;typedef struct person{char *name;int age;char sex[6];}&#xff1b;该结构体中name用的是指针而不是数组&#xff0c;所以需要给字符串在堆上申请内存然后再赋值&#xff1b;…

java –cp ./:_成为Java流专家–第2部分:中级操作

java –cp ./:就像魔术棒一样&#xff0c;中间操作将一个Stream转换为另一个Stream。 这些操作可以无穷无尽的方式组合在一起&#xff0c;以可读有效的方式执行从简单到高度复杂的任务。 本文是五分之二&#xff0c;其中还有一个GitHub存储库&#xff0c;其中包含每个单元的说…

c语言编程代码对父母感恩,c语言中编程:每个做父母的都关心自己孩子成人后孩子的生高:...

c语言中编程&#xff1a;每个做父母的都关心自己孩子成人后孩子的生高&#xff1a;据有关生理卫生知识与数理统计分析表明,影响小孩成人后的身高的因素包括遗传、饮食习惯与体育锻炼等.小孩成人后的身高与其父母的身高和自身的性别密切相关.设faHeight为其父身高,moHeight为其母…

Servlet之javaweb应用(二)

一、 使用 JavaEE 版的 Eclipse 开发动态的 WEB 工程(JavaWEB 项目) 1). 把开发选项切换到 JavaEE 2). 可以在 Window -> Show View 中找到 Package Explorer, 并把其拖拽到开发区的左边 3). 在 Servers 面板中新建 Tomcat 服务器. 一定要关联到 Tomcat 安装的根目录 4). 新…

java流与文件——文本输入输出

【0】README 0.1&#xff09; 本文描述转自 core java volume 2&#xff0c; 旨在理解 java流与文件——文本输入输出 的相关知识&#xff1b; 0.2&#xff09; 在保存数据时&#xff0c;可以选择是二进制还是文本格式&#xff1b; 在存储文本字符串时&#xff0c; 需要考虑字…

RandomAccessFile类解析

【0】README 0.1&#xff09; 本文描述转自 core java volume 2&#xff0c; 旨在理解 java流与文件——RandomAccessFile类解析 的相关知识&#xff1b; 0.1&#xff09; 本文 转自&#xff1a; http://blog.csdn.net/akon_vm/article/details/7429245 &#xff0c; for com…

Servlet之Tomcat配置与启动(一)

一、 部署并启动 tomcat 服务器 1). 解压 apache-tomcat-7.0.11.zip 到一个非中文目录下 2). 配置一个环境变量 java_home(指向 JDK 安装的根目录) 或 jre_home 3). 通过双击 apache-tomcat-6.0.16\bin 目录下的 startup.bat, 启动服务器 4). 可以在浏览器中输入 localhost:8…

随机数生成器c语言,句子随机生成器-怎么用C语言生成随机数

为随机数生成器初始化一个种子值在易语言中使用什么命令名置随机数种子 ()‘调用格式&#xff1a; 〈无返回值〉 置随机数种子 (〔整数型 欲置入的种子数值〕) - 系统核心支持库->算术运算英文名称&#xff1a;randomize为随机数生成器初始化一个种子值&#xff0c;不同的种…

nsstring 空值比较_用比较器的nulls排序具有空值的列表

nsstring 空值比较你好朋友&#xff0c; 在本教程中&#xff0c;我们将看到如何使用Java 8 Comparator.nullsFirst在列表中的项目很少为空时如何对项目列表进行排序&#xff0c;从而将null视为列表中的最小元素。 –什么是比较器 – nullsFirst方法在Comparator中做什么 –…

hibernate的Configuration和配置文件

一、hibernate的入口Configuration 在Hibernate中&#xff0c;Configuration是hibernate的入口。在实例化一个Configuration的时候&#xff0c;Hibernate会自动在环境变量&#xff08;classpath&#xff09;里面查找Hibernate配置文件hibernate.properties。如果该文件存在&…

单片机c语言6种开方,单片机快速开平方的算法

C语言中开平方的算法中要开平方的话,可以在头文件中加#include .然后调sqrt(n);函数即可.但在单片机中要开平方.可以用到下面算法:算法1:本算法只采用移位、加减法、判断和循环实现&#xff0c;因为它不需要浮点运算&#xff0c;也不需要乘除运算&#xff0c;因此可以很方便地运…

spring 配置只读事务_只读副本和Spring Data第3部分:配置两个实体管理器

spring 配置只读事务我们之前的设置可以正常工作。 我们现在要做的是进一步发展&#xff0c;并配置两个单独的实体管理器&#xff0c;而不会影响我们之前实现的功能。 第一步是将默认实体管理器配置设置为主要配置。 这是第一步 package com.gkatzioura.springdatareadreplic…

java流与文件——读写二进制数据(DataOutput + DataInput)

【0】README 0.1&#xff09; 本文描述转自 core java volume 2&#xff0c; 旨在理解 java流与文件——读写二进制数据&#xff08;DataOutput DataInput&#xff09;的相关知识&#xff1b; 0.2&#xff09; for complete my diy code, please visit https://github.com/p…

dsp课程设计c语言源码,DSP课程设计-基于C语言实现256点的FFT精选.pdf

DSP课程设计-基于C语言实现256点的FFT精选XX 大学J1111111 UNIVERSITYDSP 课 程 设 计基于CCS 的FFT 算法的C 语言实现和验证学院名称&#xff1a;专业班级&#xff1a;学 号&#xff1a;学生姓名&#xff1a;指导教师姓名&#xff1a;201 年 0 月 0 日一、 课程设计目的1.此次…

java 字符数组与字符串_用于字符串和数组的5种简单有效的Java技术

java 字符数组与字符串Java通常会排在前五种最流行的编程语言中&#xff0c;因此可以理解。 它是一种通用语言&#xff0c;非常容易学习&#xff0c;因为它是一种高级语言&#xff0c;并且可以满足许多用例。 由于这些原因&#xff0c;Java是一门很棒的语言&#xff0c;可以用来…