我的异常网 Java Web开发 Java 面试 J2ME J2EE Java相关 Eclipse J2SE .NET分析设计 .NET Framework .NET面试 .NET组件控件 VC J# Delphi .NET报表 C# ASP LINQ .NET新技术 VB Web Service .NET相关 Oracle面试 Oracle认证考试 Oracle管理 Oracle开发 Oracle技术 Java Exception DotNet Exception Oracle Exception
  

java.io.EOFException 一直报这个错误

不知为什么一直报这个错误:
java.io.EOFException
at java.io.DataInputStream.readFully(+48)
at java.io.DataInputStream.readUTF(+30)
at java.io.DataInputStream.readUTF(+4)
at gesanri.SetCanvas. <init>(+295)
at gesanri.MainCanvas.commandAction(+31)
 

做一个天气预报,可以保存要显示的城市名称
在增加城市页面,我的rms关键操作如下(其中SetCanvas.cityName是一个Vector,用来保存城市名,在执行此段代码之前,我已经把新增加的城市名添加进了这个Vector
 

Java code

try {
 recordstore = RecordStore.openRecordStore("cityStore", true);
   } catch (Exception e) {
 e.printStackTrace();
   }
   
   try {
 byte[] outputRecord;
 String city = null;
 ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
 DataOutputStream outputDataStream = new DataOutputStream(outputStream);
 
 for(int i = 0; i < SetCanvas.cityName.size(); i++){
 city = (String)SetCanvas.cityName.elementAt(i);
 outputDataStream.writeUTF(city);
 }
 outputDataStream.writeInt(SetCanvas.cityName.size());
 outputDataStream.flush();
 outputRecord = outputStream.toByteArray();
 recordstore.setRecord(1,outputRecord, 0, outputRecord.length);
 outputStream.reset();
 outputStream.close();
 outputDataStream.close();
   } catch (Exception e) {
 e.printStackTrace();
   }
   try {
 recordstore.closeRecordStore();
   } catch (Exception e) {
 e.printStackTrace();
   } 



SetCanvas里的rms关键操作如下,这里首先判断了如果是初次运行这个程序,则添加北京、上海、重庆3个城市
 

Java code

try {
  recordstore = RecordStore.openRecordStore("cityStore", true);
  if(recordstore.getNumRecords() == 0){
   byte[] outputRecord;
   ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
   DataOutputStream outputDataStream = new DataOutputStream(outputStream);
   outputDataStream.writeUTF("北京");
   outputDataStream.writeUTF("上海");
   outputDataStream.writeUTF("重庆");
   outputDataStream.writeInt(3);
   outputDataStream.flush();
   outputRecord = outputStream.toByteArray();
   recordstore.addRecord(outputRecord, 0, outputRecord.length);
   outputStream.reset();
   outputStream.close();
   outputDataStream.close();
   
   cityName.addElement("北京");
   cityName.addElement("上海");
   cityName.addElement("重庆");
  }
  else{
   cityName.removeAllElements();
   String inputString = null;
   int inputInteger = 0;
   byte[] byteInputData = new byte[100];
   ByteArrayInputStream inputStream = new ByteArrayInputStream(byteInputData);
   DataInputStream inputDataStream = new DataInputStream(inputStream);
   recordstore.getRecord(1,byteInputData,0);
   inputInteger = inputDataStream.readInt();
   for(int i = 0; i < inputInteger; i++){
 inputString = inputDataStream.readUTF();
 cityName.addElement(inputString);
   }
   inputStream.reset();
   inputStream.close();
   inputDataStream.close();
  }
  }catch (Exception e) {
  e.printStackTrace();
  }
  try {
  recordstore.closeRecordStore();
  } catch (Exception e) {
  e.printStackTrace();
  } 




------解决方法--------------------------------------------------------
 

Java code

//write
 ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
 DataOutputStream outputDataStream = new DataOutputStream(outputStream);
 outputDataStream.writeInt(SetCanvas.cityName.size());//先写size
 for(int i = 0; i < SetCanvas.cityName.size(); i++){
 city = (String)SetCanvas.cityName.elementAt(i);
 outputDataStream.writeUTF(city);
 }
 outputRecord = outputStream.toByteArray();
 recordstore.setRecord(1,outputRecord, 0, outputRecord.length);
   outputDataStream.close();
//read
ByteArrayInputStream inputStream = new ByteArrayInputStream(byteInputData);
   DataInputStream inputDataStream = new DataInputStream(inputStream);
   recordstore.getRecord(1,byteInputData,0);
   inputInteger = inputDataStream.readInt();
   for(int i = 0; i < inputInteger; i++){
 inputString = inputDataStream.readUTF();
 cityName.addElement(inputString);
   }
   inputDataStream.close();
	    
    
如异常没有得到解决,请继续查看以下解决方法:
热点异常解决方法
最新异常解决方法
随机异常解决方法