文件反序列化方法及生成指定随机数集合技术求助
嘿,我来帮你搞定这两个编程问题:
问题1:如何对文件进行反序列化操作?
反序列化就是把之前通过序列化写入文件的对象,重新恢复成内存中可操作的Java对象。这里给你一套标准的实现步骤和代码示例:
核心步骤:
- 打开一个
FileInputStream,指向存储序列化对象的文件
- 打开一个
- 用
ObjectInputStream包装这个文件输入流,它专门处理对象的反序列化
- 用
- 调用
readObject()方法读取对象,记得强制转换为目标类型
- 调用
- 务必关闭流(推荐用
try-with-resources语法,自动帮你关闭资源,避免内存泄漏)
- 务必关闭流(推荐用
代码示例:
import java.io.FileInputStream; import java.io.ObjectInputStream; import java.io.Serializable; // 注意:要反序列化的类必须实现Serializable接口 class User implements Serializable { private static final long serialVersionUID = 1L; // 固定版本号,避免类结构变化导致反序列化失败 private String name; private int age; // 构造方法、getter/setter省略 } public class DeserializeExample { public static void main(String[] args) { // 用try-with-resources自动关闭流 try (FileInputStream fis = new FileInputStream("user.ser"); ObjectInputStream ois = new ObjectInputStream(fis)) { // 读取并转换为目标对象 User user = (User) ois.readObject(); System.out.println("反序列化成功:" + user.getName() + ", " + user.getAge()); } catch (Exception e) { e.printStackTrace(); } } }
注意事项:
- 目标类必须实现
Serializable接口,否则会抛出NotSerializableException - 类的
serialVersionUID要保持和序列化时一致,不然可能反序列化失败 - 要处理
ClassNotFoundException(如果类的定义找不到)、IOException等异常
问题2:创建集合并填充20个1到15的随机整数
你原来的写法重复写了20次rand.nextInt,太冗余啦!这里给你两种更简洁的实现方式,而且能准确生成1到15(包含边界)的随机数:
方式1:用普通循环(兼容性好,适合所有Java版本)
import java.util.ArrayList; import java.util.List; import java.util.Random; public class RandomListExample { public static void main(String[] args) { Random rand = new Random(); List<Integer> list1 = new ArrayList<>(); // 循环20次,每次添加1-15的随机整数 for (int i = 0; i < 20; i++) { // nextInt(15)生成0-14,加1后变成1-15 list1.add(rand.nextInt(15) + 1); } System.out.println("生成的集合:" + list1); } }
方式2:用Java 8+的Stream API(代码更简洁)
import java.util.List; import java.util.Random; import java.util.stream.Collectors; public class RandomListStreamExample { public static void main(String[] args) { // ints(数量, 起始值(包含), 结束值(不包含)),所以1到16就是1-15的范围 List<Integer> list1 = new Random().ints(20, 1, 16) .boxed() // 把int转换为Integer .collect(Collectors.toList()); System.out.println("生成的集合:" + list1); } }
关键说明:
rand.nextInt(15)生成的是0到14的整数,所以要加1才能得到1-15- 用
ints(20,1,16)时,结束值是16(不包含),所以实际生成的是1到15的整数
内容的提问来源于stack exchange,提问作者user9676458363
相关产品推荐
相关产品推荐

