当前位置: 首页 > 知识库问答 >
问题:

java集合序列化

施令秋
2023-03-14

包装com.company;进口java.io.*;

导入静态com。公司主要的磁盘

公共类存储系统{private static final String FILE_NAME=“D:/Songs.data”;

public void serialization() {
    File file = new File (FILE_NAME);
    ObjectOutputStream oos = null;

    try {
        FileOutputStream fos = new FileOutputStream(file);
        if(fos != null) {
            oos = new ObjectOutputStream(fos);
            for (Song song : disk.getSongList()) {
                oos.writeObject(song);
            }
        }
    }
    catch (FileNotFoundException e){
        e.printStackTrace();
    }
    catch (IOException e) {
        e.printStackTrace();
    }
    finally {
        if(oos != null){
            try {
                oos.close();
            }
            catch (IOException e){
                e.printStackTrace();
            }
        }
    }
}



public static void deserialization() throws InvalidObjectException {
    File file = new File (FILE_NAME);
    ObjectInputStream ois = null;
    try {
        FileInputStream fis = new FileInputStream(file);
        if(fis != null) {
            for(int i = 0; i < 3; i++)
            {
                ois = new ObjectInputStream(fis);
                Song song = (Song) ois.readObject();
                disk.addSong(song);
            }
        }
    }
    catch (FileNotFoundException e){
        e.printStackTrace();
    }
    catch (IOException | ClassNotFoundException e) {
        e.printStackTrace();
    }
    finally {
        try {
            ois.close();
        }
        catch (IOException e){
            e.printStackTrace();
        }
    }
}

}

无法序列化/反序列化。我有一个应该写入文件然后输出的歌曲列表。我不明白为什么它只读取一首歌。

档案:�Øsrcom。公司歌曲“Ї……ј04јJ L genget Ljava/lang/String;L nameq~L timeq~xpt 2:16t有毒Phonksq~t 2:28 GAZt Phonksq~t 3:23t Warriort 重金属 t 2:59t边界可选(岩石)t 6:23t进入 沙曼 重金属 t Phonkt 2:54sq t岩石)警报 2:28sq

控制台输入:有毒2:16 Phonk GAZ 2:28 Phonk Warrior 3:23重金属边界2:59可选岩石进入sandman 6:23重金属Phonk 2:54报警岩石2:28你做什么流行2:57击中Phonk 2:18

控制台输出: Song{name='Toxic', time='Phonk', genge='2:16'}

请告诉我有什么问题

共有1个答案

裴昕
2023-03-14

问题似乎出在反序列化方法上。为什么要为(int i=0;i)做这个循环

    public static void deserialization() throws InvalidObjectException {
        File file = new File (FILE_NAME);           
        try {
            FileInputStream fis = new FileInputStream(file);
            ObjectInputStream ois = new ObjectInputStream(fis);
            if(fis != null) {
                  boolean cont = true;
                  while(cont){
                    Song song = (Song) ois.readObject();
                    if(song != null) {
                        disk.addSong(song);
                    }else {
                        cont = false;
                    }
                }
           }
        }
        catch (FileNotFoundException e){
            e.printStackTrace();
        }
        catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
        finally {
            try {
                ois.close();
            }
            catch (IOException e){
                e.printStackTrace();
            }
        }
    }

我希望这对你有帮助。

 类似资料:
  • 问题内容: 我有一个Java集合: 现在在显示列表之前有一个字段,我想按此排序此集合。 有什么办法可以做到吗? 问题答案: 使用比较器: 此外,如果实现,则只需使用 使用JDK 8,语法要简单得多。 更简单 最简单的 显然,初始代码也可以用于JDK 8。

  • 主要内容:1 集合元素的排序,2 Collections sort方法,3 字符串正序排序,4 字符串倒序排序,5 包装类型排序,6 自定义对象排序1 集合元素的排序 我们可以对以下元素进行排序: 字符串对象 包装类对象 用户自定义对象 Collections类提供用于对集合的元素进行排序的静态方法。如果集合元素为Set类型,则可以使用TreeSet。但是,我们无法对List的元素进行排序。Collections类提供用于对List类型元素的元素进行排序的方法。 2 Collections so

  • 问题内容: 我有一个需要序列化为XML的对象,其中包含以下字段: XStream可以很好地序列化它(在使用一些别名之后),如下所示: 就目前而言还可以,但是我希望能够将元素重命名为。从XStream站点上的别名文档中,我看不到一种明显的方法。我是否缺少明显的东西? 问题答案: 我建议将更改为,其中Tag是本质上仅包含字符串的域对象。然后你说: 您将得到您想要的。这样可以避免滚动自己的Convert

  • 我有一个程序有很多数据对象。每种方法都实现了可比性,并设置为从最高到最低(基于简单的长值)排序,包括重复的值。我希望这些对象存储在一个集合/列表中,这样我就可以遍历它,并在其各自的位置取出每个对象。 我已经研究过使用树集,但是这不允许重复,因此只保留具有相同值的多个对象中的一个。然后我找到了TreeMultiset,它可以保持元素具有相同的值。唯一的问题是,它只是存储同一对象的副本,而不是多个相等

  • 问题内容: 列表,队列和集合之间有什么区别? 问题答案: 简单来说: 一个 列表 是一个对象,在同一个对象可能出现不止一次的有序列表。例如:[1,7,1,3,1,1,1,5]。谈论列表中的“第三要素”是有意义的。您可以在列表中的任何位置添加元素,在列表中的任何位置更改元素,或从列表中的任何位置删除元素。 一个 队列 也定购,但你永远只触摸元件的一端。所有元素都在队列的“结尾”处插入,并从队列的“开

  • 问题内容: 我试图创建一个IContractResolver来简化WebApi项目上的安全处理。 我正在尝试: 我想基于一组动态条件来序列化某些对象/属性(例如,调用端点的用户角色)。 因此,我实现了一个自定义属性,该属性在Interface的CreateProperty重写中进行了检查,并将ShouldSerialize函数设置为我自己的逻辑。 我现在的问题是,是否可以有条件地序列化某个列表中的