2014-09-04 84 views
0

我正在尝试写入文件,然后再次读取它。InvalidProtocolBufferException:协议消息结束标记标记与预期标记不匹配

我写代码:

ObjectOutputStream oos = null; 
FileOutputStream fout = null; 
try 
{ 
    Object myObject; 
    fout = new FileOutputStream(new File("C:\\Foo","Bar.log")); 

    oos = new ObjectOutputStream(fout); 
    oos.writeObject(myObject); 

} catch (Exception ex) { 
    ex.printStackTrace(); 
} finally { 
    try { 
     oos.close(); 
     fout.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

我的读者:

FileInputStream input; 
try { 
    input = new FileInputStream(new File("C:\\Foo\\Bar.log")); 
    MyFile parsedObject = MyFileFormat.MyFile.parseFrom(input); 

} catch (FileNotFoundException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

但我得到的解析器此异常:

com.google.protobuf.InvalidProtocolBufferException: Protocol message end-group tag did not match expected tag. 
    at com.google.protobuf.InvalidProtocolBufferException.invalidEndTag(InvalidProtocolBufferException.java:94) 

谁能帮助?

+0

您已经标记了这个“protobuf-net”,但这不可能是正确的,它只能在.Net上运行。 – RenniePet 2014-09-04 18:35:38

+0

我在这里可以想到的最可能的事情是,你用一个*更小的*文件覆盖了一个文件,而不会截断它 - 因此在最后留下垃圾。那可能吗? – 2014-09-04 19:53:20

回答

1

您使用java的ObjectOutputStream序列化您的对象,但使用一些与番石榴有关的自定义反序列化? 如果您使用ObjectOutputStream编写东西,则应使用ObjectInputStream来阅读它。另外,你的例子没有任何意义。你永远不会在序列化片段中初始化myObject变量,这段代码将不会编译。

+0

你是对的。 myObject变量是一个错误,我调整了我的代码以便在此处公开,但我想你已经知道了:p sry和thanks – bsferreira 2014-09-05 08:42:31