DataInputStream、DataOutputStream可提供一些对Java基本数据型态写入的方法,像是读写int、double、 boolean等的方法,由于Java的数据型态大小是规定好的,在写入或读出这些基本数据型态时,就不用担心不同平台间资料大小不同的问题。
这边还是举档案存取来进行说明,有时候您只是要储存一个对象的成员数据,而不是整个对象的信息,成员数据的型态假设都是Java的基本数据型态,您不必要 使用Object输入、输出相关串流对象,而可以使用DataInputStream、DataOutputStream来写入或读出数据,下面这个程序 是个简单的示范:
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); } }
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(); } } }
这个程序在写入档案时,只提取对象的成员数据,而在读出时将这些数据读出,并将读回的数据设定给一个实例,是对象数据还原的一种方式。