您的位置:首页 > 移动开发 > Objective-C

java 序列化ObjectOutputStream 同一文件追加写对象问题的解决

2014-04-25 13:54 621 查看
在序列化对象中,使用ObjectOutputStream,由于该stream每new 一个对象都会调用writestreamheader,这样的话多次追加对象就会多次将header加入到流文件中。而在使用ObjectInputStream进行反序列化时 ,只new了一个stream对象,对应的也只readstreamheader一次,导致剩下的对象无法从流文件中解析出来。进入java的source
code 发现writestreamheader写入了两个short数值magic、version。而通过getchannel.position() 返回的信息也可以看到在 new objectoutputstream前后fileoutputstream的大小差异也是4个byte,即两个short的长度。因此直接利用这一特征对fileoutputstream 进行截断 去除重复写入的streamheader部分,解决了这个问题,代码如下:

/

public void writeToFile(File s) throws IOException, IOException {

boolean isexist = false;

if(s.exists())

isexist=true;

long pos = 0;

FileOutputStream fo=new FileOutputStream(s,true);

ObjectOutputStream out = new ObjectOutputStream(fo);

if(isexist){

pos=fo.getChannel().position()-4;

fo.getChannel().truncate(pos);

}

out.writeObject(this);

out.close();

}

转载地址 http://blog.csdn.net/wangquanjian/article/details/6259012#comments
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐