当前位置: 代码迷 >> J2ME >> 总是报java.io.EOFException
  详细解决方案

总是报java.io.EOFException

热度:4917   发布时间:2013-02-25 21:37:42.0
RMS中readUTF()读取记录问题,急!!!
RMS中readUTF()读取记录问题,现在情况是无法判断readUTF是否读出数据出来,总是报java.io.EOFException
异常,程序就死掉了,我想能否人工判断是否为空,让程序继续执行下去,用dis.readUTF()就报错!不知道怎么处理了,各位高手帮帮忙啊!!!!

------解决方案--------------------------------------------------------
从rms读取byte[],包装成DataInputStream
再readUTF()?
------解决方案--------------------------------------------------------
我不太确定你的意思,如果你要判断流是否可读的话,捕获异常,在异常中处理不就好了吗??
如果是其他的意思,你可以把你读取那一段的代码发一下,可以帮你修改一下
------解决方案--------------------------------------------------------
try {
RecordStore rec = RecordStore.openRecordStore( "***** ", true); // "**** "为你的的rms名字
RecordEnumeration recEnu = rec.enumerateRecords(null, null, true);
if (recEnu .hasPreviousElement()) {
int id = recEnu .previousRecordId();
ByteArrayInputStream bais = new ByteArrayInputStream(rec .getRecord(id));
DataInputStream dis= new DataInputStream(bais);
this.skeyID = dis.readUTF();
this.chk_title = dis.readUTF();
this.chk_plandate = dis.readUTF();
this.chk_ismust = dis.readUTF();
this.chk_unit = dis.readUTF();
}
rec.destroy();
recEnu .closeRecordStore();
}
catch (Exception e) {
ex.printStackTrace();
}

试试看,呵呵
------解决方案--------------------------------------------------------
我猜测有可能是在第一次readUTF的时候就把所有的内容读出来了,如果要是去解析应该比较麻烦,我建议你规定一个字段的长度,比如skeyID为8字节,chk_title为20字节,这样规定好了以后,每次把数据取出来,按照你需要的长度来new String()
  相关解决方案