有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Spring REST中的java EOFEException

因此,我有一个数据结构,我想在我的SpringREST应用程序中保留它。 这就是我如何初始化@bean

@Configuration
public class MessageBrokerInitializer {

    @Bean
    public MessageBroker getMessageBroker(){

        FileInputStream fileInputStream;
        ObjectInputStream objectInputStream;
        MessageBroker broker = null;
        try {
            fileInputStream = new FileInputStream("./data/store.ser");
            objectInputStream = new ObjectInputStream(fileInputStream);
            broker = (MessageBroker) objectInputStream.readObject();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        return (broker == null) ? new MessageBroker(): broker;
    }



}

基本上,我试图读取一个文件来初始化我的对象,或者如果文件是空的,我想重新创建数据结构。我一直在

java.io.EOFException

我怎样才能让它工作呢


共 (1) 个答案

  1. # 1 楼答案

    通过检查objectInputStream.available()可读取的字节数,可以避免EOFException,如下所示:

    @Configuration
    public class MessageBrokerInitializer {
    
        @Bean
        public MessageBroker getMessageBroker(){
    
            FileInputStream fileInputStream;
            ObjectInputStream objectInputStream;
            MessageBroker broker = null;
            try {
                fileInputStream = new FileInputStream("./data/store.ser");
    
                if(fileInputStream.available() != 0) {
                  objectInputStream = new ObjectInputStream(fileInputStream);
                  broker = (MessageBroker) objectInputStream.readObject();
                } else {
                  broker = new MessageBroker()
               }               
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            return broker;
        }
    }
    

    你可以看看here