java.io.DataInput接口和java.io.DataOutput接口详解

public interface DataInput

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

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

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

方法详解:

boolean readBoolean()
          读取一个输入字节,如果该字节不是零,则返回 true,如果是零,则返回 false。此方法适用于读取用接口 DataOutputwriteBoolean 方法写入的字节。返回:读取的 boolean 值。
byte readByte()
          读取并返回一个输入字节。此方法适用于读取用接口 DataOutputwriteByte 方法写入的字节。返回:读取的 8 位值。
char readChar()
          读取一个输入的 char 并返回该 char 值。Unicode char 由两个字节组成。设 a 为第一个读取字节,b 为第二个读取字节。返回的值是:(char)((a << 8) | (b & 0xff))。此方法适用于读取用接口 DataOutputwriteChar 方法写入的字节。返回:读取的 Unicode char 值。
double  readDouble()
          读取八个输入字节并返回一个 double 值。实现这一点的方法是:先使用与 readlong 方法完全相同的方式构造一个 long 值,然后使用与 Double.longBitsToDouble 方法完全相同的方式将此 long 值转换成一个 double 值。此方法适用于读取用接口 DataOutputwriteDouble 方法写入的字节。
float  readFloat()
          读取四个输入字节并返回一个 float 值。实现这一点的方法是:先使用与 readInt 方法完全相同的方式构造一个 int 值,然后使用与 Float.intBitsToFloat 方法完全相同的方式将此 int 值转换成一个 float 值。此方法适用于读取用接口 DataOutputwriteFloat 方法写入的字节。
void  readFully(byte[] b)  throws IOException,EOFException

          从输入流中读取一些字节,并将它们存储到缓冲区数组 b 中。读取的字节数等于 b 的长度。如果 bnull,则抛出 NullPointerException。如果 b.length 为零,则不读取字节。否则,将读取的第一个字节存储到元素 b[0] 中,下一个字节存储到 b[1] 中,依此类推。如果此方法抛出异常,则可能是因为已经用输入流中的数据更新了 b 的某些(但非全部)字节。参数:b - 存储读取数据的缓冲区。
void  readFully(byte[] b, int off, int len)
          从输入流中读取 len 个字节。如果 bnull,则抛出 NullPointerException。如果 off 为负,或 len 为负,抑或 off+len 大于数组 b 的长度,则抛出 IndexOutOfBoundsException。如果 len 为零,则不读取字节。否则,将读取的第一个字节存储到元素 b[off] 中,下一个字节存储到 b[off+1] 中,依此类推。读取的字节数至多等于 b[0]参数:b - 存储读取数据的缓冲区。off - 指定数据中的偏移量的 int。len - 指定读取的字节数的 int。 
 int  readInt()
          读取四个输入字节并返回一个 int 值。设 a 为第一个读取字节,b 为第二个读取字节,c 为第三个读取字节,d 为第四个读取字节。返回的值是: (((a & 0xff) << 24) | ((b & 0xff) << 16) |((c & 0xff) << 8) | (d & 0xff))。此方法适用于读取用接口 DataOutputwriteInt 方法写入的字节。
返回:读取的 int
 String  readLine()
          从输入流中读取下一文本行。该方法读取连续的字节,将每个字节分别转换成一个字符,直到遇到行结尾符或末尾;然后以 String 形式返回读取的字符。注意,因为此方法处理字符,所以它不支持整个 Unicode 字符集的输入。如果在一个字节都没有读取的时候就遇到文件末尾,则返回 null。否则,通过左侧补零将读取的每个字节转换成 char 类型的值。如果遇到字符 ' ',则丢弃它并且停止读取。如果遇到字符 ' ' 则丢弃它,如果后续字节转变成字符 ' ',则同样丢弃,并且停止读取。如果在遇到字符 ' '' ' 之一前遇到文件末尾,则停止读取。一旦已停止读取,则返回一个 String,它按顺序包含所有已读取且未丢弃的字符。注意,此字符串中的每个字符的值都将小于 u0100(即 (char)256)的值。
long  readLong()
          读取八个输入字节并返回一个 long 值。设 a 为第一个读取字节,b 为第二个读取字节,c 为第三个读取字节,d 为第四个读取字节,e 为五个读取字节,f 为第六个读取字节,g 为第七个读取字节,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 方法写入的字节。
 short  readShort()
          读取两个输入字节并返回一个 short 值。设 a 为第一个读取字节,b 为第二个读取字节。返回的值是:(short)((a << 8) | (b & 0xff))
 
此方法适用于读取用接口 DataOutputwriteShort 方法写入的字节。返回:读取的 16 位值。 
int  readUnsignedByte()
          读取一个输入字节,将它左侧补零 (zero-extend) 转变为 int 类型,并返回结果,所以结果的范围是 0255。如果接口 DataOutputwriteByte 方法的参数是 0255 之间的值,则此方法适用于读取用 writeByte 写入的字节。 返回:读取的无符号 8 位值。 
int   readUnsignedShort()
          读取两个输入字节,并返回 065535 范围内的一个 int 值。设 a 为第一个读取字节,b 为第二个读取字节。返回的值是:(((a & 0xff) << 8) | (b & 0xff))。如果接口 DataOutputwriteShort 方法的参数是 065535 范围内的值,则此方法适用于读取用 writeShort 写入的字节。返回:读取的无符号 16 位值。 
String readUTF()
          读入一个已使用 UTF-8 修改版格式编码的字符串。
int  skipBytes(int n) throws IOException

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

 public interface DataOutput

DataOutput 接口用于将任意 Java 基本类型转换为一系列字节,并将这些字节写入二进制流。同时还提供了一个将 String 转换成 UTF-8 修改版格式并写入所得到的系列字节的工具。

对于此接口中写入字节的所有方法,如果由于某种原因无法写入某个字节,则抛出 IOException。 

所有已知子接口:
ImageOutputStream, ObjectOutput
所有已知实现类:
DataOutputStream, FileCacheImageOutputStream, FileImageOutputStream, ImageOutputStreamImpl, MemoryCacheImageOutputStream, ObjectOutputStream, RandomAccessFile
方法摘要
void  write(byte[] b)
          将数组 b 中的所有字节写入输出流。如果 bnull,则抛出 NullPointerException。如果 b.length 为零,则不写入字节。否则,首先写入字节 b[0],然后写入字节 b[1],依此类推;最后一个写入字节是 b[b.length-1]。 
void  write(byte[] b, int off, int len)
          将数组 b 中的 len 个字节按顺序写入输出流。如果 bnull,则抛出 NullPointerException。如果 off 为负,或 len 为负,抑或 off+len 大于数组 b 的长度,则抛出 IndexOutOfBoundsException。如果 len 为零,则不写入字节。否则,首先写入字节 b[off],然后写入字节 b[off+1],依此类推;最后一个写入字节是 b[off+len-1]。 参数:b - 数据。off - 数据中的起始偏移量。len - 要写入的字节数。 
void  write(int b)
          将参数 b 的八个低位写入输出流。忽略 b 的 24 个高位。
void  writeBoolean(boolean v)
          将一个 boolean 值写入输出流。如果参数 vtrue,则写入值 (byte)1;如果 vfalse,则写入值 (byte)0。此方法写入的字节可由 DataInput 接口的 readBoolean 方法读取,然后该方法将返回一个等于 vboolean 值。
void  writeByte(int v)
          将参数 v 的八个低位写入输出流。忽略 v 的 24 个高位。(这意味着 writeByte 的作用与使用整数做参数的 write 完全相同。)此方法写入的字节可由 DataInput 接口的 readByte 方法读取,然后该方法将返回一个等于 (byte)vbyte 值。
void  writeBytes(String s)
          将一个字符串写入输出流。字符串 s 中的每一个字符被依次写入输出流,每个字符用一个字节表示。如果 snull,则抛出 NullPointerException

如果 s.length 为零,则不写入字节。否则,首先写入字符 s[0],然后写入字符 s[1],依此类推;最后一个写入字符是 s[s.length-1]。使用与 writeByte 方法完全相同的方法为每个字符写入一个低位字节。忽略字符串中每个字符的八个高位。 

void  writeChar(int v)
          将一个 char 值写入输出流,该值由两个字节组成。
void  writeChars(String s)
          将字符串 s 中的所有字符按顺序写入输出流,每个字符用两个字节表示。如果 snull,则抛出 NullPointerException。如果 s.length 为零,则不写入字符。否则,首先写入字符 s[0],然后写入字符 s[1],依此类推;最后一个写入字符是 s[s.length-1]。使用与 writeChar 方法完全相同的方法为每个字符实际写入两个字节,先使用高位字节。
void  writeDouble(double v)
          将一个 double 值写入输出流,该值由八个字节组成。
void  writeFloat(float v)
          将一个 float 值写入输出流,该值由四个字节组成。
void  writeInt(int v)
          将一个 int 值写入输出流,该值由四个字节组成。
void  writeLong(long v)
          将一个 long 值写入输出流,该值由八个字节组成。
void  writeShort(int v)
          将两个字节写入输出流,用它们表示参数值。
void  writeUTF(String str)
          将表示长度信息的两个字节写入输出流,后跟字符串 s 中每个字符的 UTF-8 修改版表示形式。
原文地址:https://www.cnblogs.com/xuepei/p/3664920.html