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