MyException - 我的异常网
当前位置:我的异常网» J2SE » 对象ObjectInputStream的文件操作,报java.io.Strea

对象ObjectInputStream的文件操作,报java.io.StreamCorruptedException错误(2)

www.MyException.Cn  网友分享于:2013-12-12  浏览:661次

}
public void setMail(String mail) {
this.mail = mail;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
public String getSigned() {
return Signed;
}
public void setSigned(String signed) {
Signed = signed;
}
public double getTel() {
return tel;
}
public void setTel(double tel) {
this.tel = tel;
}
public String getRpasswd() {
return rpasswd;
}
public void setRpasswd(String rpasswd) {
this.rpasswd = rpasswd;
}
public boolean equals(Object obj){
if (obj instanceof QQ) {
QQ qq = (QQ) obj;
if(qq.getNickname().equals(this.getNickname())&&qq.getName().equals(this.getName())){
return true;
}

}
return false;
}
public int Hashcode(){
return nickname.hashCode()^name.hashCode();

}
public String toString(){
return id+","+nickname+","+name+","+passwd+","+tel+","+mail+","+Signed;
}
}



------解决方案--------------------
在Test2.java中加入红色代码
第一部分是防止重复插入数据,第二部分是插入结束标志


File file = new File("QQ1.txt");
if(file.exists()){
file.delete();
}
fos = new FileOutputStream(file, true);
...................
...............
oos.writeObject(qq2);
oos.writeObject(null);
oos.flush();


------解决方案--------------------
oos.writeObject(qq); 
oos.writeObject(qq1); 
oos.writeObject(qq2); 
oos.flush(); 

把oos.flush();改成oos.reset();看看能不能解决问题。
估计你再次把对象写入文件的时候,用的是同一个对象(只是把对象里的成员信息修改)。这样的话程序是不会把对象修改后的版本写入文件的。

------解决方案--------------------
public class test { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
FileInputStream fis = null; 
ObjectInputStream ois = null; 

try { 
File file = new File("QQ.txt"); 
fis = new FileInputStream(file); 
ois = new ObjectInputStream(fis); 
QQ qq = null; 
while ((qq = (QQ) ois.readObject()) != null) { 

System.out.println("qq:" + qq); 
qq = (QQ) ois.readObject(); //添加这个,继续读啊!

} catch (FileNotFoundException e) { 
e.printStackTrace(); 
} catch (IOException e) { 
e.printStackTrace(); 
} catch (ClassNotFoundException e) { 
e.printStackTrace(); 
}finally{ 
if(ois!=null){ 
try { 
ois.close(); 
} catch (IOException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 


if(fis!=null){ 
try { 
fis.close(); 
} catch (IOException e) { 
e.printStackTrace(); 




------解决方案--------------------
3楼的方法,试了一下
执行一次 test2.java 后,再执行 test.java 出现 java.io.EOFException
执行多次 test2.java 后,再执行 test.java 出现 java.io.StreamCorruptedException



4楼的方法试都不用试,肯定错
因为打印的只是奇数行数据
------解决方案--------------------

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有