java.io.EOFException 异常有人解决过吗

neusoft_qing 2015-12-03 02:19:55
ois = new ObjectInputStream(is);时抛出异常java.io.EOFException
不知道怎么解决?

public Object getObject(String key) {
ShardedJedis shardedJedis = null;
Object obj = null;
ByteArrayInputStream is = null;
ObjectInputStream ois = null;
try {
shardedJedis = shardedJedisPool.getResource();
byte[] ret = shardedJedis.get(key.getBytes("UTF-8"));
if(ret != null && ret.length >0){
is = new ByteArrayInputStream(ret);
ois = new ObjectInputStream(is);
obj = ois.readObject();

}
} catch (Exception e) {
log.error(e.getMessage() + "-->get:" + e.getCause());
log.error("getObject:"+key);
//e.printStackTrace();
} finally {
try {
if(ois!=null){
ois.close();
}
if(is!=null){
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
shardedJedisPool.returnResource(shardedJedis);
}
return obj;
}
...全文
6711 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
单防詹姆斯 2019-07-11
  • 打赏
  • 举报
回复
这个ois = new ObjectInputStream(is);语句是个很诡异的东西,如果你要执行这个语句,那么你要保证你要读的文件或者字节数组中不为空,里面有数据,否则会报java.io.EOFException异常。如果你的代码ois = new ObjectInputStream(is);和oos =new ObjectOutputStream(os);在一个主函数中,不妨先完成写入,然后oos.close();关闭写入,再进行ois = new ObjectInputStream(is);就不会有java.io.EOFException异常了。
it辛巴 2017-11-07
  • 打赏
  • 举报
回复
楼主 怎么样 解决了吗?
lwpimis 2015-12-11
  • 打赏
  • 举报
回复
EOFException 指的是读到了文件的结尾,一般的解决方式是在读之前对即将读入的内容进行判断,看是不是结尾。如果是的话就跳出,不是的话就继续读。当然也可以catch了之后直接跳出。
neusoft_qing 2015-12-08
  • 打赏
  • 举报
回复
这一个是写的方法。 public String setObject(String key, Object value) { String ret = null; if (value != null) { ShardedJedis shardedJedis = null; ByteArrayOutputStream outputStream = null; ObjectOutputStream objectOutputStream = null; try { outputStream = new ByteArrayOutputStream(); objectOutputStream = new ObjectOutputStream(outputStream); objectOutputStream.writeObject(value); shardedJedis = shardedJedisPool.getResource(); ret = shardedJedis.set(key.getBytes("UTF-8"), outputStream.toByteArray()); } catch (Exception e) { log.error(e.getMessage() + "-->" + e.getCause()); log.error("setObject:"+key); e.printStackTrace(); } finally { try { objectOutputStream.close(); outputStream.close(); } catch (IOException e) { e.printStackTrace(); } shardedJedisPool.returnResource(shardedJedis); } } return ret; }
  • 打赏
  • 举报
回复
没解决过!!! 作为一个linuxer一看到EOF就很敏感。。。因为我们经常<<EOF的。 EOF是个文件结束符。 ois = new ObjectInputStream(is);时抛出异常java.io.EOFException 看样子你是在读序列化对象了!!! 应该是你序列化之后的对象没有成功写入文件吧。。。 还有,虽说java夸平台但windows的EOF和linux的是不一样的....经常用vim打开windows的文件就看到乱七八糟的东西。 EOF这东西跟计算机的发展史有很大关系的, 你只在度对象,如果要弄清楚的话,你最好把你怎么写入对象到文件的代码也发上来看看...

62,616

社区成员

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

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