DataInputStream和DataOutputStream类创建的对象称为数据输入流和数据输出流。这两个流是很有用的两个流,它们允许程序按着机器无关的风格读取Java原始数据。也就是说,当读取一个数值时,不必再关心这个数值应当是多少个字节。
DataInputStream和DataOutputStream的构造方法如下:
1)DataInputStream(InputStream in)
创建的数据输入流指向一个由参数in指定的底层输入流。
2)DataOutputStream(OutputStream out)
创建的数据输出流指向一个由参数out指定的底层输出流。
DataInputStream和DataOutputStream类的常用方法如下:
| 方法 | 说明 |
| close() | 关闭流 |
| readBoolean() | 读取一个布尔值 |
| readByte() | 读取一个字节 |
| readChar() | 读取一个字符 |
| readDouble() | 读取一个双精度浮点值 |
| readFloat() | 读取一个单精度浮点值 |
| readInt() | 读取一个int值 |
| readLong() | 读取一个长型值 |
| readShort() | 读取一个短型值 |
| readUnsignedByte() | 读取一个无符号字节 |
| readUnsignedShort() | 读取一个无符号短型值 |
| readUTF() | 读取一个UTF字符串 |
| skipBytes(int n) | 跳过给定数量的字节 |
| writeBoolean(boolean v) | 写入一个布尔值 |
| writeBytes(String s) | 写入一个字符串 |
| writeChars(String s) | 写入字符串 |
| writeDouble(double v) | 写入一个双精度浮点值 |
| writeFloat(float v) | 写入一个单精度浮点值 |
| writeInt(int v) | 写入一个int值 |
| writeLong(long v) | 写入一个长型int值 |
| writeShort(int v) | 写入一个短型int值 |
| writeUTF(String s) | 写入一个UTF字符串 |
例如,写几个Java类型的数据到一个文件,然后再读出来:
import java.io.*;
public class Main {
public static void main(String args[]) {
File file = new File("apple.txt");
try {
FileOutputStream fos = new FileOutputStream(file);
DataOutputStream outData = new DataOutputStream(fos);
outData.writeInt(100);
outData.writeLong(123456);
outData.writeFloat(3.1415926f);
outData.writeDouble(987654321.1234);
outData.writeBoolean(true);
outData.writeChars("How are you doing");
}
catch(IOException e) {}
try {
FileInputStream fis = new FileInputStream(file);
DataInputStream inData = new DataInputStream(fis);
System.out.println(inData.readInt()); //读取int数据
System.out.println(inData.readLong()); //读取long数据
System.out.println(+inData.readFloat()); //读取float数据
System.out.println(inData.readDouble()); //读取double数据
System.out.println(inData.readBoolean()); //读取boolean数据
char c = '\0';
while((c=inData.readChar()) !='\0') { //'\0'表示空字符
System.out.print(c);
}
}
catch(IOException e) {}
}
}C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程