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;
}