关于文件操作的问题,readObject相关。

Bluejeff 2004-04-04 03:46:00
小弟写了一个可读写文件的程序,可是老是卡在readObject这里,不知为什么,论坛上有相关的帖子,但还是没有看懂,故在此请教!多谢各位先!~~
下面是我的code:
IDNMS.java

import java.io.*;
public class IDNMS implements Serializable
{
public IDNMS()
{
try{
FileOutputStream f=new FileOutputStream("datafile.txt");
ObjectOutputStream o=new ObjectOutputStream(f);
o.close();
}catch(Exception excep){
System.out.println(excep.toString());
}
}

public static void main(String args[])
{
System.out.println("Welcome\n");
// IDNMS init=new IDNMS();
data_Object dt=new data_Object();
Display list=new Display();
InsertDataItem idi=new InsertDataItem();
SearchDataItem sdi=new SearchDataItem();
dt.setData(300294718, "Jeff", "Bluejeff@tom.com");
idi.doInsert(dt);
list.listData();
}
}

class Display implements Serializable
{
public void listData()
{
data_Object dt=new data_Object();
try{
FileInputStream f=new FileInputStream("datafile.txt");
ObjectInputStream o=new ObjectInputStream(f);
do{
dt=(data_Object)o.readObject(); //到这里就卡驻了,错误信息是:“java.io.StreamCorruptedException”
System.out.println(dt);
}while(dt.id>=0);
o.close();
dt.freeData();
}catch(Exception excep){
System.out.println(excep.toString());
}
}
}

class data_Object implements Serializable
{
int id;
String name;
String mail;

public void setData(int iid, String iname, String imail)
{
id=iid;
name=iname;
mail=imail;
}

public void freeData()
{
id=0;
name="";
mail="";
}

public String toString()
{
return "ID: "+id+"\nName: "+name+"\nMail: "+mail+"\n";
}
}

class InsertDataItem implements Serializable
{
public void doInsert(data_Object d)
{
data_Object dt=new data_Object();
dt=d;
try{
FileOutputStream f= new FileOutputStream("datafile.txt", true);
ObjectOutputStream o=new ObjectOutputStream(f);
o.writeObject(dt);
// System.out.println(dt);
o.close();
dt.freeData();
}
catch(Exception excep){
System.out.println(excep.toString());
}
}
}

class SearchDataItem implements Serializable
{
public void doSearch()
{
data_Object dt=new data_Object();
data_Object temp=new data_Object();
try{
FileInputStream f=new FileInputStream("datafile.txt");
ObjectInputStream o=new ObjectInputStream(f);
do{
temp=(data_Object)o.readObject();
if(dt.id==temp.id || dt.name.equals(temp.name) || dt.mail.equals(temp.mail))
System.out.println(temp);
}while(temp.id>0);
o.close();
dt.freeData();
temp.freeData();
}catch(Exception excep){
System.out.println(excep.toString());
}
}
}

请问问题出在哪里?我觉得关键就在readObject为什么不能直接付值给已定义好的Object。
感激不尽。
...全文
137 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
eboyzhang 2004-04-07
  • 打赏
  • 举报
回复
If no other good way is found,you might have to:
1.read out the objects and store them into a container;
and,
2.write them as well as those new ones into a ObjectOutputStream(do not use appending mode).

But I don't think this is the best way.

GZing.....
Bluejeff 2004-04-04
  • 打赏
  • 举报
回复
这个问题现在是解决了,但是又有了新问题
使用缺省的serializetion的实现时,一个ObjectOutputStream的构造和一个ObjectInputStream的构造必须一一对应.ObjectOutputStream的构造函数会向输出流中写入一个标识头,而ObjectInputStream会首先读入这个标识头.因此,多次以追加方式向一个文件中写入object时,该文件将会包含多个标识头.所以用ObjectInputStream来deserialize这个ObjectOutputStream时,将产生StreamCorruptedException
所以我在试图多加几条记录时就会出现上述的问题,还没有找到解决的办法
eboyzhang 2004-04-04
  • 打赏
  • 举报
回复
参考this:

public class IDNMS{
public static void main(String[] args)throws IOException,ClassNotFoundException{
ObjectOutputStream out = new ObjectOutputStream(
new FileOutputStream("datafile.txt"));
for(int i = 0; i < 5; i++){
data_Object data = new data_Object();
data.setData(i,"name" + i, "mymail" + i + "@earth.com");
out.writeObject(data);//write object first
}
out.close();
long now = System.currentTimeMillis();
while(System.currentTimeMillis() < now + 5000)
;//delay
ObjectInputStream in = new ObjectInputStream(
new FileInputStream("datafile.txt"));
for(int i = 0; i < 5; i++){
data_Object data = (data_Object)in.readObject();//read object
System.out.println(data);
}
in.close();
}
}

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧