Java IO流 -> 处理流 -> 数据流和对象流
1. 处理流
- DataInputStream & DataOutputStream
- 分别继承自InputStream和OutputStream,属于处理流。
- 需要分别套接在InputStream和OutputStream类型的字节流上。
- DataInputStream 和 DataOutputStream提供了可以存取与机器无关的Java原始类型数据(int/double等)的方法。
import java.io.*;
/**
* 测试数据流DataInputStream和DataOutputStream
*/
public class TestDataStream {
public static void main(String[] args) {
testDataStream();
}
public static void testDataStream(){
try(OutputStream fout = new FileOutputStream("data.txt");
InputStream fin = new FileInputStream("data.txt");){
DataOutputStream out = new DataOutputStream(fout);
out.writeUTF("我在学习数据输入输出流的使用");
out.writeInt(100);
out.writeBoolean(false);
out.writeChar('V');
out.flush();
DataInputStream in = new DataInputStream(fin);
System.out.println(in.readUTF());
System.out.println(in.readInt());
System.out.println(in.readBoolean());
System.out.println(in.readChar());
}catch (FileNotFoundException e){
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}
}
}
2. 对象流
- 直接将Object写入或读出。
- Serializable接口
- transient关键字:修饰的属性不会被序列化
- Externalizable接口
import java.io.*;
/**
* 测试数据流ObjectInputStream和ObjectOutputStream
* AnoBabe
*/
public class TestObjectStream {
public static void main(String[] args) {
testObjectStream();
}
/**
* 测试对象流的存取
*/
public static void testObjectStream(){
try(OutputStream fout = new FileOutputStream("object.txt");
InputStream fin = new FileInputStream("object.txt");){
ObjectOutputStream out = new ObjectOutputStream(fout);
out.writeUTF("我在学习数据输入输出流的使用");
out.writeInt(100);
out.writeBoolean(false);
out.writeChar('V');
out.writeObject(new Student("Ano",24,"XDU"));
out.writeObject(new Student("Charlie",25,"XDU"));
out.writeObject(new Student("Jackson",27,"XDU"));
out.flush();
ObjectInputStream in = new ObjectInputStream(fin);
System.out.println(in.readUTF());
System.out.println(in.readInt());
System.out.println(in.readBoolean());
System.out.println(in.readChar());
System.out.println(in.readObject());
System.out.println(in.readObject());
System.out.println(in.readObject());
}catch (FileNotFoundException e){
e.printStackTrace();
}catch (IOException | ClassNotFoundException e){
e.printStackTrace();
}
}
}
class Student implements Serializable{
private String name;
private transient int age; //age不被序列化
private String school;
public Student(){}
public Student(String name, int age, String school){
this.name = name;
this.age = age;
this.school = school;
}
@Override
public String toString() {
return "name=" + name +
", age=" + age +
", school=" + school;
}
}
-
运行结果:
我在学习数据输入输出流的使用 100 false V name=Ano, age=0, school=XDU name=Charlie, age=0, school=XDU name=Jackson, age=0, school=XDU