我编写了一个可序列化程序,首先创建一个' Test '类,然后在“ java.ser ”文件中成功序列化Test Class对象。当我读取Test类对象时,当Output正确时。当我打开序列化生成的文件“ java.ser ”文件时,当我更改了一些生成的二进制值并再次读取此可序列化的文件“ java.ser ”文件时。输出完全改变。怎么...?
测试课程
package com.test.question;
import java.io.*;
class Test implements Serializable {
private String name;
public Test(String name) { this.name = name; }
public String getName() { return name;}
}
WriteTest类
package com.test.question;
import java.io.*;
public class WriteTest {
public static void main(String[] args) {
try (
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("java.ser"));
) {
Test test1 = new Test("OpenJdk-12");
oos.writeObject(test1);
} catch (IOException io) {
io.printStackTrace();
}
}
}
ReadTest类
package com.test.question;
import java.io.*;
public class ReadTest {
public static void main(String[] args) {
try (
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("java.ser"))
) {
//Deserilization of test object
Test test2 = (Test)ois.readObject();
System.out.println("Name is : " + test2.getName());
} catch (IOException | ClassNotFoundException iocnfe ) {
iocnfe.printStackTrace();
}
}
}
java.ser文件
aced 0005 7372 0016 636f 6d2e 7465 7374
2e71 7565 7374 696f 6e2e 5465 7374 6d96
c315 d09c f0eb 0200 014c 0004 6e61 6d65
7400 124c 6a61 7661 2f6c 616e 672f 5374
7269 6e67 3b78 7074 000a 4f70 656e 4a64
6b2d 3132
首先运行此程序输出。
输出:
D:\Linux\IDE\All-Workspace\OCA-Wrokspace\Ocaexam\src>java --module-path mods --module testingProgram/com.test.question.ReadTest
Name is : OpenJdk-12
然后,当我更改java.ser文件 3132 = 3134 中的最后一个值时,打开一个Serialziable生成的“ java.ser ”文件。然后再次运行,此程序的输出将完全更改。
第二次运行该程序。
D:\Linux\IDE\All-Workspace\OCA-Wrokspace\Ocaexam\src>java --module-path mods --module testingProgram/com.test.question.ReadTest
Name is : OpenJdk-14
我的问题是可序列化的生成文件是否安全...?