我用ObjectOutputStream输出数据,在用ObjectInputStream来读,第一个记录可以读出来,为什么后面的就提示:
java.io.StreamCorruptedException
  at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1301)
  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:324)
  at SearchThread.main(SearchThread.java:47)代码如下:
http://bbs.chinajavaworld.com/user/download/682420/SearchThread.javaimport java.io.*;
import java.net.*;
import java.util.*;
public class SearchThread {
/*
private ThreadGroup tG=new ThreadGroup("SearchThread");
Thread sub[];
SubThread st=new SubThread();

public SearchThread()
{
st.init();
/*
for(int i=0;i<10;i++)
{
sub[i]=new Thread(tG,st,"thread"+(i+1));
sub[i].start();
}

//st.run();
}
*/
BufferedWriter bw=null;
ObjectOutputStream output;
static File f[]=new File[51];

public static void main(String args[])
{
try{
for(int i=0;i<=50;i++)
{
f[i]=new File(""+i+".txt");
//if(!f[i].exists())
// f[i].createNewFile();
}
//BufferedReader bu=new BufferedReader(new FileReader(new File("D:\\code\\IR863\\050404url.no\\050722url.no")));
//byte c[]=new byte[35];
//RandomAccessFile bu=new RandomAccessFile("D:\\code\\IR863\\050404url.no\\050722url.no","rw");
//try{int i=bu.read(c,390,35);}
//catch(IOException ee){ee.printStackTrace();}
//System.out.println(c);
new SearchThread();

int i=0;
ObjectInputStream in=new ObjectInputStream(new FileInputStream(new File("ss")));
while((i++)<10){
MyItem mm=(MyItem)in.readObject();
System.out.println("senNo="+mm.senNo+"   senLen="+mm.senLen+" senOff="+mm.senOff);
}
in.close();
}
/*
catch(EOFException ee)
{
ee.printStackTrace();
}*/
catch(Exception e)
{
e.printStackTrace();
}
}//class SubThread implements Runnable
public SearchThread()
{
//static int i=0;
BufferedReader dict;
// LineNumberReader lNumber;
// Random ran=null;
String tmp="";
long sentenceNo=0,sentenceLen=0,nextsentenceOff=0; String DocNo;

///public void init()
//{
System.out.println("==");
try{


dict=new BufferedReader(new FileReader(new File("D:\\code\\IR863\\050404url.no\\050722url.no")));
// lNumber=new LineNumberReader(dict);
// ran=new Random();
int i=0;
while(((tmp=dict.readLine())!=null)&&(i++<10))
{
StringTokenizer st=new StringTokenizer(tmp,"  ");
String url=st.nextToken();
//if(!st.hasMoreTokens()) {System.out.println("Have no DocNo!");DocNo="";}
DocNo=st.nextToken();
DocNo=DocNo.substring(DocNo.indexOf("-")+1,DocNo.length());
++sentenceNo;
sentenceLen=tmp.length();
System.out.println(DocNo+" "+nextsentenceOff+" "+sentenceLen);
//
//bw=new BufferedWriter(new FileWriter(f[(int)(Long.parseLong(DocNo)/1000000)],true));
//bw.write(DocNo+" "+nextsentenceOff+" "+sentenceLen+System.getProperty("line.separator"));
//if(sentenceNo==100000) 
//bw.flush();f[(int)(Long.parseLong(DocNo)/100000)]
output=new ObjectOutputStream(new FileOutputStream(new File("ss"),true));
MyItem mm=new MyItem(DocNo,nextsentenceOff,sentenceLen);
output.writeObject(mm);
output.flush();
//记录每个句子的号码,长度,偏移量
//if(Long.parseLong(DocNo)/1000000)
//System.out.println("sentenceNo="+sentenceNo+" sentenceLen="+sentenceLen+" nextsentenceOff="+nextsentenceOff);
nextsentenceOff+=sentenceLen+1;
}
output.close();
//System.out.println(""+lNumber.getLineNumber());
}
catch(Exception e)
{
e.printStackTrace();
System.out.println("File Read error!");
}
//}
/*
public void run()
{
System.out.println("start"+i);
searchURL(Math.abs(ran.nextInt())%60000,100);
}
private void searchURL(int index,int length)
{
System.out.println("OK"+index+" Bad"+length);
}
*/
}/*
public synchronized void write(String str)
{
try{
bw.write(str);
}
catch(IOException e)
{
e.printStackTrace();
}
}*/
}class MyItem implements Serializable 
{
String senNo;
long senOff;
long senLen;
//String TopicNo;
public MyItem()
{
senNo="";
senLen=0;
senOff=0;
//TopicNo="";
}
public MyItem(String senNo,long senOff,long senLen)
{
this.senNo=senNo;
this.senOff=senOff;
this.senLen=senLen;
//this.TopicNo=str;
}
public void setsenNo(String senNo)
{
this.senNo=senNo;
}
public void setsenLen(long senNo)
{
this.senLen=senNo;
}
public void setsenOff(long senNo)
{
this.senOff=senNo;
}
public String getsenNo()
{
return senNo;
}
public long getsenLen()
{
return senLen;
}
public long getsenOff()
{
return senOff;
}
}