Java 反序列化数据流

Java 反序列化数据流,java,exception,serialization,Java,Exception,Serialization,我有一个问题,我已经处理了很长一段时间了。当尝试反序列化文件夹中的自定义声音对象时,我继续遇到3个异常。IOException、NullPointerException和StreamCorruptedException。请看一看: 读音方法: public static Sound readSound(String loc){ try{ FileInputStream fis = new FileInputStream(loc); ObjectInputS

我有一个问题,我已经处理了很长一段时间了。当尝试反序列化文件夹中的自定义声音对象时,我继续遇到3个异常。IOException、NullPointerException和StreamCorruptedException。请看一看:

读音方法:

public static Sound readSound(String loc){
    try{
        FileInputStream fis = new FileInputStream(loc);
        ObjectInputStream ois = new ObjectInputStream(fis);

        fis.close();
        ois.close();

        return (Sound)ois.readObject();
    }catch(Exception e){
        System.out.println("Failed to read a serialized object.");
        e.printStackTrace();
        return null;
    }
}
收到的例外/错误: 此处粘贴太多,粘贴不正确

加载声音: 添加声音只是将声音添加到ArrayList和JComboBox中

private static File saveDirFile = new File("/Users/francisj12/Desktop/ACData/");
private static File saveDirFileSounds = new File(saveDirFile.getPath()+"/sounds/");
public static void loadAllSounds(){
    if(!saveDirFile.exists()){
        saveDirFile.mkdir();
    }
    if(!saveDirFileSounds.exists()){
        saveDirFileSounds.mkdir();
    }

    for(int x=0; x<saveDirFileSounds.list().length; x++){
        try{
            File sndFl = new File(saveDirFileSounds.listFiles()[x].getPath());
            Sound newSound = Serialize.readSound(sndFl.getPath());
            addSound(newSound);
        }catch(Exception e){
            e.printStackTrace();
            continue;
        }
    }
}
下面是.ser文件的样子:一旦我开始在变量上使用transient,这样我就可以序列化我的自定义声音对象,我还不了解transient,它开始使.ser看起来如下,而不是一大堆奇怪的字符,现在只是一行奇怪的字符 sr警报、声音、xp


希望这是你们需要的所有信息,非常感谢你们的帮助

在返回Soundois.readObject之前,不应关闭inputstream;阅读您的对象,然后关闭输入流。@xiaowang非常感谢,似乎已经完成了这个技巧!我应该意识到。如果你不介意的话,我还有一个问题,什么时候,确切地说是什么。冲水对溪流有什么作用?我知道它能释放记忆,但这就是我真正知道的。