DataOutputStream和DataInputStream如何serialize/deserialize?
How to serialize/deserialize with DataOutputStream and DataInputStream?
我正在尝试 serialize/deserialize 使用 DataOutputSteam 和 DataInputSteam 而不是 ObjectInputStream/ObjectOutputStream。
序列化失败。 txt 文件保持为空。
当然最后test2字符串都是空的(不能反序列化一个空文件)。
这是我的对象:
public class Test implements Serializable {
public String[] nom;
public Test() {
nom = new String[5];
nom[0] = "Coucou";
nom[1] = "Je suis un tab de String";
nom[2] = "Je vais me faire serialiser";
nom[3] = "Et deserialiser aussi !";
nom[4] = "Je suis le roi du monde !";
}
}
这是我的尝试:
Test test = new Test();
Test test2 = new Test();
test2.nom[0] = "";
test2.nom[1] = "";
test2.nom[2] = "";
test2.nom[3] = "";
test2.nom[4] = "";
DataInputStream dis;
DataOutputStream dos;
// serialisation manuelle
try {
dos = new DataOutputStream(
new BufferedOutputStream(
new FileOutputStream(
new File("nom2.txt"))));
for(int i = 0; i < 5; i++)
{
dos.writeUTF(test.nom[i]);
}
} catch (FileNotFoundException e) {
} catch (IOException e) {}
// deserialisation manuelle
dis = new DataInputStream(
new BufferedInputStream(
new FileInputStream(
new File("nom2.txt"))));
try {
test.nom[0] = dis.readUTF();
test.nom[1] = dis.readUTF();
test.nom[2] = dis.readUTF();
test.nom[3] = dis.readUTF();
test.nom[4] = dis.readUTF();
} catch (FileNotFoundException e) {
} catch (IOException e) {}
为了简短的解释,调用 dos.flush()
将强制系统获取缓冲的任何内容并将其实际写入磁盘。因此,您需要在尝试读取同一文件之前调用它。有关 flush()
的更多详细信息,我建议查看 What is the purpose of flush() in Java streams?,因为之前已经回答过。
尝试关闭输出文件,然后再打开它进行阅读。在某些系统上,例如Windows第二次打开不会成功
关闭它会刷新 BufferedOutputStream.
我正在尝试 serialize/deserialize 使用 DataOutputSteam 和 DataInputSteam 而不是 ObjectInputStream/ObjectOutputStream。
序列化失败。 txt 文件保持为空。 当然最后test2字符串都是空的(不能反序列化一个空文件)。
这是我的对象:
public class Test implements Serializable {
public String[] nom;
public Test() {
nom = new String[5];
nom[0] = "Coucou";
nom[1] = "Je suis un tab de String";
nom[2] = "Je vais me faire serialiser";
nom[3] = "Et deserialiser aussi !";
nom[4] = "Je suis le roi du monde !";
}
}
这是我的尝试:
Test test = new Test();
Test test2 = new Test();
test2.nom[0] = "";
test2.nom[1] = "";
test2.nom[2] = "";
test2.nom[3] = "";
test2.nom[4] = "";
DataInputStream dis;
DataOutputStream dos;
// serialisation manuelle
try {
dos = new DataOutputStream(
new BufferedOutputStream(
new FileOutputStream(
new File("nom2.txt"))));
for(int i = 0; i < 5; i++)
{
dos.writeUTF(test.nom[i]);
}
} catch (FileNotFoundException e) {
} catch (IOException e) {}
// deserialisation manuelle
dis = new DataInputStream(
new BufferedInputStream(
new FileInputStream(
new File("nom2.txt"))));
try {
test.nom[0] = dis.readUTF();
test.nom[1] = dis.readUTF();
test.nom[2] = dis.readUTF();
test.nom[3] = dis.readUTF();
test.nom[4] = dis.readUTF();
} catch (FileNotFoundException e) {
} catch (IOException e) {}
为了简短的解释,调用 dos.flush()
将强制系统获取缓冲的任何内容并将其实际写入磁盘。因此,您需要在尝试读取同一文件之前调用它。有关 flush()
的更多详细信息,我建议查看 What is the purpose of flush() in Java streams?,因为之前已经回答过。
尝试关闭输出文件,然后再打开它进行阅读。在某些系统上,例如Windows第二次打开不会成功
关闭它会刷新 BufferedOutputStream.