5. DataInputStream和DataOutputStream与ObjectInputStream和ObjectOutputStream区别
时间: 2023-12-03 21:19:11 浏览: 120
1. 数据类型支持不同:DataInputStream和DataOutputStream只支持基本数据类型和字符串,而ObjectInputStream和ObjectOutputStream支持任意类型的对象序列化和反序列化。
2. 序列化方式不同:DataInputStream和DataOutputStream采用二进制方式进行序列化和反序列化,而ObjectInputStream和ObjectOutputStream采用Java默认的序列化方式。
3. 对象生命周期不同:DataInputStream和DataOutputStream只能读写短暂的数据流,而ObjectInputStream和ObjectOutputStream可以读写长期存在的对象。
4. 性能不同:由于DataInputStream和DataOutputStream只支持基本数据类型和字符串,因此它们的序列化和反序列化速度相对ObjectInputStream和ObjectOutputStream更快。
综上所述,DataInputStream和DataOutputStream适用于简单的数据读写,而ObjectInputStream和ObjectOutputStream适用于复杂的对象序列化和反序列化。
相关问题
5.DataInputStream和DataOutputStream与ObjectInputStream和ObjectOutputStream区别
DataInputStream和DataOutputStream是Java I/O库中的类,用于读写基本数据类型和字符串。它们提供了一组方法,可以方便地从输入流中读取和写入基本数据类型和字符串,如int、double、float、boolean和String等。这些方法具有固定的顺序和格式,所以它们只适用于读写基本数据类型和字符串,不支持读写对象。
ObjectInputStream和ObjectOutputStream是Java I/O库中的类,用于读写对象。它们提供了一组方法,可以方便地从输入流中读取和写入Java对象。这些方法可以读写任何Java对象,包括自定义的对象。ObjectInputStream和ObjectOutputStream使用Java序列化机制来读写对象,这意味着对象的所有属性和状态都可以被保存和恢复。
因此,DataInputStream和DataOutputStream适用于读写基本数据类型和字符串,而ObjectInputStream和ObjectOutputStream适用于读写Java对象。两者主要的区别在于它们的读写方式和支持的数据类型不同。
1、 简述Java I/O流中,DataInputStream与DataOutputStream的使用。 2、 简述Java I/O中,如何实现对象的串行化。(涉及到ObjectInputStream与ObjectOutputStream)
1、DataInputStream和DataOutputStream是Java I/O流中的两个类,用于读写基本数据类型和字符串。DataInputStream提供了readInt()、readDouble()等方法,可以从输入流中读取相应类型的数据;DataOutputStream提供了writeInt()、writeDouble()等方法,可以把相应类型的数据写入输出流中。同时,DataOutputStream还提供了writeUTF()方法,可以把字符串写入输出流中。
使用方法如下:
```java
try (DataOutputStream dos = new DataOutputStream(new FileOutputStream("data.txt"));
DataInputStream dis = new DataInputStream(new FileInputStream("data.txt"))) {
dos.writeInt(123);
dos.writeDouble(3.14);
dos.writeUTF("hello world");
int i = dis.readInt();
double d = dis.readDouble();
String s = dis.readUTF();
System.out.println(i);
System.out.println(d);
System.out.println(s);
} catch (IOException e) {
e.printStackTrace();
}
```
2、Java中的对象是存储在内存中的,如果要把对象写入文件或网络传输,就需要使用对象的串行化。对象的串行化是指将一个对象转换为一个字节序列,以便存储在文件或网络中,或者在Java虚拟机之间传递。
Java提供了ObjectInputStream和ObjectOutputStream类,用于实现对象的串行化。要实现对象的串行化,需要让对象所属的类实现Serializable接口。Serializable接口是一个标记接口,没有任何方法,只是用来标记这个类可以被串行化。
使用方法如下:
```java
class Person implements Serializable {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.obj"));
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.obj"))) {
Person person = new Person("Tom", 18);
oos.writeObject(person);
Person p = (Person) ois.readObject();
System.out.println(p);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
```
需要注意的是,如果一个对象的成员变量也是对象,那么这个成员变量所属的类也必须实现Serializable接口。如果一个成员变量不想被串行化,可以在它前面加上transient关键字。
阅读全文
相关推荐


















