1、 简述Java I/O流中,DataInputStream与DataOutputStream的使用。 2、 简述Java I/O中,如何实现对象的串行化。(涉及到ObjectInputStream与ObjectOutputStream)
时间: 2024-03-25 20:41:48 浏览: 54
Java的DataInputStream和DataOutputStream数据输入输出流
5星 · 资源好评率100%
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关键字。
阅读全文