Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:序列化初学者问题:-(_Java_Arrays_Serialization - Fatal编程技术网

Java:序列化初学者问题:-(

Java:序列化初学者问题:-(,java,arrays,serialization,Java,Arrays,Serialization,我想通过序列化来保存和存储简单的邮件对象,但我总是会收到一个错误,我找不到它在哪里 package sotring; import java.io.*; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.*; import com.sun.org.apache.bcel.internal.generic.INEG; public class storeing { publ

我想通过序列化来保存和存储简单的邮件对象,但我总是会收到一个错误,我找不到它在哪里

package sotring;
import java.io.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;

import com.sun.org.apache.bcel.internal.generic.INEG;

public class storeing {

    public static void storeMail(Message[] mail){
        try {
            ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("mail.ser"));
            out.writeObject(mail);
            out.flush();
            out.close();

        } catch (IOException e) {
        }   
    }

        public static Message[] getStoredMails(){

     try
     {

        ObjectInputStream in = new ObjectInputStream(new FileInputStream("mail.ser"));
        Message[] array = (Message[]) in.readObject() ;
        for (int i=0; i< array.length;i++)
            System.out.println("EMail von:"+ array[i].getSender() + " an " + array[i].getReceiver()+ " Emailbetreff: "+ array[i].getBetreff() + " Inhalt: " + array[i].getContent());

        System.out.println("Size: "+array.length);  //return array;
        in.close();
        return array;    
     }
     catch(IOException ex)
     {
        ex.printStackTrace();
        return null;
     }
     catch(ClassNotFoundException ex)
     {
        ex.printStackTrace();
        return null;
     }  
}

    public static void main(String[] args) {
        User user1 = new User("User1", "geheim");
        User user2 = new User("User2", "geheim");

        Message email1 = new Message(user1.getName(), user2.getName(), "Test", "Fooobaaaar");
        Message email2 = new Message(user1.getName(), user2.getName(), "Test2", "Woohoo");
        Message email3 = new Message(user1.getName(), user2.getName(), "Test3", "Okay =) ");
        Message [] mails = {email1, email2, email3};
        storeMail(mails);
        Message[] restored = getStoredMails();;         
    }
}
例外情况如下:

主线程java.lang中出现异常。错误:未解决的编译问题: 此方法必须返回Message[]类型的结果 在sotring.storeing.getStoredMailssStoreing.java:22 在sotring.storeing.mainstoreing.java:57


感谢您的帮助!!!!!!!!!!!

如果发生异常,您将永远无法在getStoredMails中找到return语句。您需要抛出捕获的异常,可能将其包装在另一个更具描述性的异常中,或者只在方法末尾返回null。这取决于发生错误时要执行的操作


哦,您的in.close应该在finally块中。否则,您可能可以很好地读取数据,但如果无法关闭流,则可能会将其丢弃。

catch子句需要返回一些内容

public static Message[] getStoredMails(){

     try
     {

            ObjectInputStream in = new ObjectInputStream(new FileInputStream("mail.ser"));
            Message[] array = (Message[]) in.readObject() ;
            System.out.println("Size: "+array.length);      //return array;
            in.close();
            return array;    
     }
     catch(IOException ex)
     {
            ex.printStackTrace();
     }
     catch(ClassNotFoundException ex)
     {
            ex.printStackTrace();
     }    
     return null; //fix  
}

我修改了源代码。我在异常中添加了return null,并在函数中为输出添加了循环。函数给出了正确的输出,但随后抛出了异常。

另一方面,您是否考虑过第三方序列化程序库


我现在正在为一个项目使用它,它似乎只需很少的努力就可以完成工作。

在getStoredMails方法的异常处理块中,您不会返回任何内容

建议的修改:

public static Message[] getStoredMails(){

         try
         {

                ObjectInputStream in = new ObjectInputStream(new FileInputStream("mail.ser"));
                Message[] array = (Message[]) in.readObject() ;
                System.out.println("Size: "+array.length);      //return array;
                in.close();
                return array;    
         }
         catch(IOException ex)
         {
                ex.printStackTrace();
         }
         catch(ClassNotFoundException ex)
         {
                ex.printStackTrace();
         }  

         return null;    
    }

有人可以删除用户和消息列表吗?要一直滚动到它们旁边会有点尴尬。如果可能的话,你应该避免使用com.sun类。它们可能会在将来的版本中中断,或者甚至不会出现在其他VM中。看起来你的修改刚刚被破坏。但是无论如何,你仍然会遇到“未解决”问题吗“编译问题”或新问题?我没有收到异常,但我无法将工作数组从函数传输到主函数:-我不知道为什么不能传输工作数组?您是什么意思?是否收到异常?方法是否返回null?我没有收到异常,方法返回null。但是system.out in functionn打印正确的内容您可能想再次更新您的帖子,有人用拼写和语法修正对您的第一篇帖子进行了重写。查看修订页,我觉得很好。
public static Message[] getStoredMails(){

         try
         {

                ObjectInputStream in = new ObjectInputStream(new FileInputStream("mail.ser"));
                Message[] array = (Message[]) in.readObject() ;
                System.out.println("Size: "+array.length);      //return array;
                in.close();
                return array;    
         }
         catch(IOException ex)
         {
                ex.printStackTrace();
         }
         catch(ClassNotFoundException ex)
         {
                ex.printStackTrace();
         }  

         return null;    
    }