学习目标

 掌握DataOutputStream和DataInputStream的作用

可以使用DataOutputStream和DataInputStream写入和读入数据

数据操作流

在io包中,提供了两个与平台无关的数据操作流:

数据输出流(DataOutputStream)

数据输入流 (DataInputStream)

通常数据输出流会按照一定的格式将数据输出,再通过数据输入流按照一定的格式将数据读入。

例如:有如下的订单数据

java dataoutputstream java dataoutputstream按摩_java

如果要想使用数据操作流,则肯定要由用户自己制定数据的保存格式,必须按指定好的格式保存数据,才可以使用数据输入流将数据读取进来。

DataOutputStream:DataOutputStream是OutputStream的子类,此类的定义如下:

public class DataOutputStream extends FilterOutputStream implements DataOutput

此类继承自FilterOutputStream类(FilterOutputStream是OutputStream的子类)同时实现了DataOutput接口,在DataOutput接口中定义了一系列的写入各种数据的方法。writeXxx()

要想使用DataOutputStream写入数据的话,则必须指定好数据的输出格式。

 

数据的写入格式:

以上每条数据之间使用"\n"分隔,每条数据中的每个内容之间使用"\t"分隔。如下图所示:

java dataoutputstream java dataoutputstream按摩_数据_02

[java] view plain copy

 

1. import java.io.DataOutputStream ;  
2. import java.io.File ;  
3. import java.io.FileOutputStream ;  
4. public class DataOutputStreamDemo{  
5. public static void main(String args[]) throws Exception{    // 所有异常抛出  
6. null ;           // 声明数据输出流对象  
7. new File("d:" + File.separator + "order.txt") ; // 文件的保存路径  
8. new DataOutputStream(new FileOutputStream(f)) ;   // 实例化数据输出流对象  
9. "衬衣","手套","围巾"} ; // 商品名称  
10. float prices[] = {98.3f,30.3f,50.5f} ;      // 商品价格  
11. int nums[] = {3,2,1} ;  // 商品数量  
12. for(int i=0;i<names.length;i++){ // 循环输出  
13. // 写入字符串  
14. '\t') ;   // 写入分隔符  
15. // 写入价格  
16. '\t') ;   // 写入分隔符  
17. // 写入数量  
18. '\n') ;   // 换行  
19.         }  
20. // 关闭输出流  
21.     }  
22. };

[java] view plain copy

 

1. import java.io.DataInputStream ;  
2. import java.io.File ;  
3. import java.io.FileInputStream ;  
4. public class DataInputStreamDemo{  
5. public static void main(String args[]) throws Exception{    // 所有异常抛出  
6. null ;        // 声明数据输入流对象  
7. new File("d:" + File.separator + "order.txt") ; // 文件的保存路径  
8. new DataInputStream(new FileInputStream(f)) ; // 实例化数据输入流对象  
9. null ;    // 接收名称  
10. float price = 0.0f ;    // 接收价格  
11. int num = 0 ;   // 接收数量  
12. char temp[] = null ;    // 接收商品名称  
13. int len = 0 ;   // 保存读取数据的个数  
14. char c = 0 ;    // '\u0000'  
15. try{  
16. while(true){  
17. new char[200] ;  // 开辟空间  
18. 0 ;  
19. while((c=dis.readChar())!='\t'){    // 接收内容  
20.                     temp[len] = c ;  
21. // 读取长度加1  
22.                 }  
23. new String(temp,0,len) ; // 将字符数组变为String  
24. // 读取价格  
25. // 读取\t  
26. // 读取int  
27. // 读取\n  
28. "名称:%s;价格:%5.2f;数量:%d\n",name,price,num) ;  
29.             }  
30. catch(Exception e){}  
31.         dis.close() ;  
32.     }  
33. };

 

总结:

1、和随机读取访问很相似。

2、两个接口:DataOutput接口、DataInput接口,这两个接口的操作彼此对应,以后还会被用到。