数据流 DataOutputStream
DataInputStream
,这是两个 与平台无关
的流。
若想使用 数据输出流和输入流,肯定要用户指定数据的保存格式
。必须按指定的格式保存数据,数据输入流才可以将数据读取进来。
1 DataOutputStream
DataOutputStream
是 OutputStream
的子类
public class DataOutputStream extends
FilterOutputStream
implementsDataOutput
此类继承自 FilterOutputStream
类,同时实现 DataOutput
接口。在 DataOutput 接口,定义了一系列写入各种数据的方法。DataOutput 接口,定义了一系列 writeXXX()
的操作,可以写入各种类型数据。
想要使用 DataOutputStream 写入数据的话,则必须指定好数据的输出格式
每一行的数据,通过 n\
完结,每行的各个数据通过 “\t” 完结
代码示例:
DataOutputStream dos = null; // 声明数据输出流对象
File f = new File("E:"+ File.separator + "a.txt"); // 文件保存路径
dos = new DataOutputStream( new FileOutputStream(f)); // 实例化数据输出流对象
String names[] = { "衬衣","手套","围巾"}; // 商品名称
float prices[] = { 98.3f, 30.3f, 50.5f}; // 商品价格
int nums[] = { 3,2,1}; // 商品数量
for(int i=0; i<names.length; i++){
dos.writeChars(names[i]); // 写入字符串 注意:这里是 writeChars(),不是 writeChar()
dos.writeChar('\t'); // 写入分隔符 ,这里是 writeChar()
dos.writeFloat(prices[i]); // 写入价格
dos.writeChar('\t'); // 写入分隔符
dos.writeInt(nums[i]); // 写入数量
dos.writeChar('\n'); // 换行
}
dos.close(); // 关闭输出流
代码生成的文件
使用 DataOutputStream
写入的数据 要使用 DataInputStream
取出来
2 DataInputStream
DataInputStream dis = new DataInputStream(new FlieInputStream("E:"+ File.separator + "a.txt"));
String name = null; // 接受 名称
float price = 0.0f; // 接受 价格
int num = 0; // 接受 数量
cha temp[] = null; // 接受商品名称
int len = 0;
char c = 0;
try{
while (true) {
temp = new char[200]; // 开辟空间
len = 0;
// 接收内容,因为直到读取到 '\t',才完成了读取一个字符串,未读取到,表示还有内容
while( (c=dis.readChar()) != '\t') {
temp[len] = c;
len++; // 读取长度 加1
}
name = new String(temp,0,len); // 将字符数组变为String
price = dis.readFloat(); // 读取价格
dis.readChar(); // 读取 \t
num = dis.readInt(); // 读取 int
dis,readChar(); // 读取 \n
System.out.printf("名称:%s; 价格: %5.2f; 数量: %d\n",name,peice,num);
}
} catch(Exception e) {}
dis.close();
执行结果:
名称:衬衣; 价格: 98.30; 数量:3
名称:手套; 价格: 30.30; 数量:2
名称:围巾; 价格:50.50; 数量:1
可见:
DataInputStream 读取字符串只能通过 ‘readChar()’,一个个读取,不像 DataOutputStream 一样,还区分 writeChars() writeChar()
总结:
DataOutput接口 和 DataInput接口,两个数据操作流的方法,都是继承两个接口的方法,这两个接口的操作,彼此对应