我有一些代码试图从 Java 中的套接字读取 Google 协议缓冲区消息。但是,如果 mergeDelimitedFrom() 方法读取无效数据或重置套接字连接(可能还有其他原因),则可能会引发 IOException。如果连接被重置,我想退出循环,但如果它只是一条无效消息,我想继续运行。一种想法是在 X 次连续失败后只使用某种异常计数器并退出,但我希望能够弄清楚发生了什么类型的错误,而不是一头雾水。
这基本上是我的代码:
while (m_Running)
{
SomeMessage message = null;
try
{
final Builder builder = SomeMessage.newBuilder();
if (builder.mergeDelimitedFrom(m_InputStream))
{
message = builder.build();
}
else
{
// Google protocol buffers doesn't document it very well
// but if mergeDelimietedFrom returns false then it has
// reached the end of the input stream. For a socket, no
// more data will be coming so exit from the thread
m_Running = false;
}
}
catch (final IOException e)
{
// what should really be done here ???
}
}