数据流:
接口 DataInput 和 DataOutput,设计了一种较为高级的数据输入输出方式:除了可处理字节和字节数组外,还可以处理 int、float、boolean等基本数据类型,这些数据在文件中的表示方式和它们在内存中的一样,无须转换,如 read(), readInt(), readByte()...; write(), writeChar(), writeBoolean()...此外,还可以用 readLine()方法读取一行信息。
方法:
方法 | 返回值 | 说明 |
---|---|---|
readBoolean() | boolean | |
readByte() | byte | |
readShort() | short | |
readChar() | char | |
readInt() | int | |
readLong() | long | |
readDouble() | double | |
readFloat() | float | |
readUnsignedByte() | int | |
readUnsignedShort() | int | |
readFully(byte[] b) | void | 读满字节数组,不同于 InputStream。read |
reaFully(byte[] b, int off,int len) | void | 读满指定长度,不同于 InputStream.read |
skipBytes(int n) | int | 与 InputStream.skip 等价 |
readUTF() | String | 安装 UTF-8 形式从输入中读取字符串 |
readLine() | String | 按回车( )换行( )为分割符读取一行字符串,不完全支持 UNICODE |
writeBoolean(boolean v) | void | |
writeByte(int v) | void | |
writeShort(int v) | void | |
writeChar(int v) | void | |
writeInt(int v) | void | |
writeLong(long v) | void | |
writeFloat(float v) | void | |
writeDouble(double v) | void | |
write(byte[] b) | void | 与 OutputStream.write 同义 |
write(byte[] b, int off, int len) | void | 与OutputStream.write 同义 |
write(int b) | void | 与OutputStream.write 同义 |
writeBytes(String s) | void | 只输出每个字符的低8位;不完全支持 UNICODE |
writeChars(String s) | void | 每个字符在输出中都占两个字节 |
数据流类 DateInputStream 和 DataOutputStream 的处理对象除了是字节或字节数组外,还可以实现对文件的不同数据类型的读写:
- 分别实现了 DataInput 和 DataOutput 接口
- 在提供字节流的读写手段同时,以统一的形式向输入流中写入 boolean,int,long,double 等基本数据类型,并可以再次把基本数据类型的值读取回来。
- 提供了字符串读写的手段
数据流可以连接一个已经建立好的数据对象,例如网络连接、文件等。数据流可以通过如下方式建立:
FileInputStream fis = new FileInputStream("file1.txt"); FileOutputStream fos = new FileOutputStream("file2.txt"); DataInputStream dis = new DataInputStream(fis); DataOutputStream dos = new DataOutputStream(fos);
接下来我们通过具体的代码,看一看它的用法吧:
import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class DataStream { public static void main(String[] args) throws IOException{ // TODO Auto-generated method stub //向文件 a.txt 写入 FileOutputStream fos = new FileOutputStream("a.txt"); DataOutputStream dos = new DataOutputStream(fos); try { dos.writeBoolean(true); dos.writeByte((byte)123); dos.writeChar('J'); dos.writeDouble(3.1415926); dos.writeFloat(2.122f); dos.writeInt(123); } finally { dos.close(); } //从文件 a.txt 读出 FileInputStream fis = new FileInputStream("a.txt"); DataInputStream dis = new DataInputStream(fis); try { System.out.println(" " + dis.readBoolean()); System.out.println(" " + dis.readByte()); System.out.println(" " + dis.readChar()); System.out.println(" " + dis.readDouble()); System.out.println(" " + dis.readFloat()); System.out.println(" " + dis.readInt()); } finally { dis.close(); } } }