15.5.5 增强的多字节输入流DataInput

“DataInputStream”类实现了“DataInput”接口,所以它可以使用这个接口所提供的方法。这个接口的常用方法如下所示。


boolean readBoolean();

byte readByte();

char readChar();

short readShort();

int readInt();

long readLong();

float readFloat();

double readDouble();


以上这些方法都用于读取基本数据类型的数据,下面还有一个方法比较特殊,可以读取“utf-8”形式的字符串。


String readUTF();


【实例15.11】下面看一个关于“DataInputStream”类的实例。


01 import java.io.*;

02 ///创建一个文件类对象f

03 ///创建一个文件输入流对象fis,并且以f作为参数

04 ///创建一个多字节输入流对象dis,并且以fis作为参数

05 ///使用dis对象从f中读取数据

06 public class file10

07 {

08 public static void main(String[]args)throws Exception

09 {

10 File f=new File("d:\1.dat");

11 FileInputStream fis=new FileInputStream(f);

12 DataInputStream dis=new DataInputStream(fis);

13 try

14 {

15 System.out.println(dis.readUTF());

16 }

17 catch(Exception e)

18 {}

19 dis.close();

20 }

21 }


【代码说明】第10行创建目标对象f,这里要读取的文件是D盘下的1.dat。第15行调用readUTF()方法读取数据。

【运行效果】


明天要下雨了。


从上面的程序段可以看出,通过DataInputStream类可以处理一些整型、字符串类型的数据。【实例15.12】针对上面两个类的学习,练习这两个类的一个综合实例,代码如下。


01 import java.io.*;

02 ///创建一个类file11

03 ///在类中设置age、maths、name、chinese、physical等参数

04 ///在read方法中,以多字节输入流对象作为参数,并且利用此对象读取数据

05 public class file11

06 {

07 public void read(DataInputStream dis)

08 {

09 String name="";

10 int age=0;

11 float maths=0;

12 float english=0;

13 float chinese=0;

14 float physical=0;

15 try

16 {

17 name=dis.readUTF();

18 age=dis.readInt();

19 maths=dis.readFloat();

20 english=dis.readFloat();

21 chinese=dis.readFloat();

22 physical=dis.readFloat();

23 }

24 catch(Exception e)

25 {}

26 System.out.println("姓名:"+name);

27 System.out.println(" 年龄:"+age);

28 System.out.println("数学成绩:"+maths);

29 System.out.println("英语成绩:"+english);

30 System.out.println("语文成绩:"+chinese);

31 System.out.println("物理成绩:"+physical);

32 }

33 //在write方法中,以多字节输出流对象作为参数,并且利用此对象写入数据

34 public void write(String name, int age, float maths, float english, float chinese, float

35 physical, DataOutputStream dos)

36 {

37 try

38 {

39 dos.writeUTF(name);

40 dos.writeInt(age);

41 dos.writeFloat(maths);

42 dos.writeFloat(english);

43 dos.writeFloat(chinese);

44 dos.writeFloat(physical);

45 }

46 catch(Exception e)

47 {}

48 }

49 ///创建文件类对象

50 ///创建文件输入流对象

51 ///创建数据输入流对象

52 ///创建文件输出流对象

53 ///创建数据输出流对象

54 ///在文件类对象中写入内容

55 ///再将其内容读出来

56 public static void main(String[]args)throws Exception

57 {

58 file11 f2=new file11();

59 File f=new File("d:\1.dat");

60 FileInputStream fis=new FileInputStream(f);

61 DataInputStream dis=new DataInputStream(fis);

62 FileOutputStream fos=new FileOutputStream(f);

63 DataOutputStream dos=new DataOutputStream(fos);

64 f2.write("王鹏",30,87,88,93,100,dos);

65 f2.read(dis);

66 f2.write("张浩",29,90,89,93,100,dos);

67 f2.read(dis);

68 f2.write("宋江",33,77,80,90,80,dos);

69 f2.read(dis);

70 f2.write("李宇",32,92,81,83,90,dos);

71 f2.read(dis);

72 f2.write("宋丹",31,81,98,100,99,dos);

73 f2.read(dis);

74 dos.close();

75 dis.close();

76 }

77 }


【代码说明】上面的程序段是先将数据写到文本中,然后再从文本中将数据读出来。这个程序看上去很复杂,其实只要将输入和输出分成两个子系统,自然就简单了。

【运行效果】


姓名:王鹏

 年龄:30

数学成绩:87.0

英语成绩:88.0

语文成绩:93.0

物理成绩:100.0

姓名:张浩

 年龄:29

数学成绩:90.0

英语成绩:89.0

语文成绩:93.0

物理成绩:100.0

姓名:宋江

 年龄:33

数学成绩:77.0

英语成绩:80.0

语文成绩:90.0

物理成绩:80.0

姓名:李宇

 年龄:32

数学成绩:92.0

英语成绩:81.0

语文成绩:83.0

物理成绩:90.0

姓名:宋丹

 年龄:31

数学成绩:81.0

英语成绩:98.0

语文成绩:100.0

物理成绩:99.0


前面所学习的处理数据的方式,都以字节为单位,只不过通过不同的流组合成其他类型数据而已。真正要处理其他的字符流,还需要继续学习下面的章节。