Java:从文件中使用ObjectInputStream读取队列对象会产生nullPointerException
我有一个存储队列内容的QStorage类Java:从文件中使用ObjectInputStream读取队列对象会产生nullPointerException,java,Java,我有一个存储队列内容的QStorage类 class QStorage{ Queue<A> q = new PriorityQueue<A>(5); public Queue<a> readQ(){ try{ FileInputStream fin = new FileInputStream("/home/requestQ.ser"); ObjectInputStream ois = new ObjectInputStream(f
class QStorage{
Queue<A> q = new PriorityQueue<A>(5);
public Queue<a> readQ(){
try{
FileInputStream fin = new FileInputStream("/home/requestQ.ser");
ObjectInputStream ois = new ObjectInputStream(fin);
q = (Queue)ois.readObject();
}catch(Exception e){}
return q;
}
}
类QStorage{
队列q=新的优先级队列(5);
公共队列readQ(){
试一试{
FileInputStream fin=newfileinputstream(“/home/requestQ.ser”);
ObjectInputStream ois=新ObjectInputStream(fin);
q=(队列)ois.readObject();
}捕获(例外e){}
返回q;
}
}
在另一个类中,我调用上述类的readQ()方法来存储队列内容
将文件发送到另一个队列
class MyQ{
public static void main(String args[]){
QueueStorage qs = new QueueStorage();
Queue<A> myQ = new PriorityQueue<A>(5);
myQ = qs.readQ();
//...some other stuffs goes here
}
}
类MyQ{
公共静态void main(字符串参数[]){
QueueStorage qs=新的QueueStorage();
队列myQ=新的优先级队列(5);
myQ=qs.readQ();
//…还有其他东西在这里
}
}
这里,如果队列的某些条目已经存储在文件中,readQ()将正确返回这些条目。但是如果文件中没有存储条目(我的意思是存储空队列)
然后这个方法给出了nullPointerException,我的程序停止工作
注意:我有一个要求,我应该检查存储的内容,而不知道是否
它是否是空的
请帮忙。谢谢 NPE是由您忽略文件为空时抛出的EOFEException的可怕做法造成的,实际上所有IOException、ClassNotFoundException、RuntimeException等都不会这样做。要么:
注意:如果文件为空,并不意味着“存储了空队列”。这意味着您在向文件中写入任何内容时发生了灾难性的失败,根据此处展示的实践,您无疑也忽略了这一点 你忘了实现可序列化的
Serializable
好吧,我已经实现了可序列化的Serializable
,忘了在这里显示。仍然收到相同的错误。如果问题是NPE(如果文件为空),请捕获它并返回一个null
对象。@alfasin:如果有一些存储的条目,请查看我的程序是否正常运行。只有在没有存储项时才会出现问题。@alfasin:Ya我忘了在异常时返回null
。现在开始工作了。非常感谢。噢..我忘了在异常时返回null
。非常感谢@EJP的建议。现在开始工作了。