ITEEDU

Java Gossip: DataInputStream、DataOutputStream

DataInputStream、DataOutputStream可提供一些对Java基本数据型态写入的方法,像是读写int、double、 boolean等的方法,由于Java的数据型态大小是规定好的,在写入或读出这些基本数据型态时,就不用担心不同平台间资料大小不同的问题。

这边还是举档案存取来进行说明,有时候您只是要储存一个对象的成员数据,而不是整个对象的信息,成员数据的型态假设都是Java的基本数据型态,您不必要 使用Object输入、输出相关串流对象,而可以使用DataInputStream、DataOutputStream来写入或读出数据,下面这个程序 是个简单的示范:

Student.java
package onlyfun.caterpillar;
public class Student?{
	private String name;
	private int score;
	public Student() {
		name = "N/A";
	}
	public Student(String name, int score) {
		this.name = name;
		this.score = score;
	}
	public void setName(String name) {
		this.name = name;
	}
	public void setScore(int score) {
		this.score = score;
	}
	public String getName() {
		return name;
	}
	public int getScore() {
		return score;
	}
	public void showData() {
		System.out.println("name: " + name);
		System.out.println("score: " + score);
	}
}
DataStreamDemo.java
package onlyfun.caterpillar;
import java.io.*;
public class DataStreamDemo {
	public static void main(String[] args) {
		Student[] students = {new Student("Justin", 90),
			new Student("momor", 95),
		new Student("Bush", 88)};
		try {
			DataOutputStream dataOutputStream =
			new DataOutputStream(
			new FileOutputStream("data.dat"));
			for(Student student : students) {
				dataOutputStream.writeUTF(student.getName());
				dataOutputStream.writeInt(student.getScore());
			}
			dataOutputStream.flush();
			dataOutputStream.close();
			DataInputStream dataInputStream =
			new DataInputStream(
			new FileInputStream("data.dat"));
			for(int i = 0; i < students.length; i++) {
				String name = dataInputStream.readUTF();
				int score = dataInputStream.readInt();
				students[i] = new Student(name, score);
				students[i].showData();
			}
			dataInputStream.close();
		}
		catch(IOException e) {
			e.printStackTrace();
		}
	}
}

这个程序在写入档案时,只提取对象的成员数据,而在读出时将这些数据读出,并将读回的数据设定给一个实例,是对象数据还原的一种方式。