如何在C ++中读取java对象?

时间:2009-09-15 05:22:19

标签: java c++ logging log4j

我正在用C ++实现一个日志服务器;接受来自Java程序的日志消息(通过log4j套接字appender)。如何在C ++中阅读这些Java日志对象?

6 个答案:

答案 0 :(得分:7)

您应该配置log4j appender以发送XML格式的消息。那么这只是在C ++中读取XML的问题。

答案 1 :(得分:2)

序列化的java对象是一个字节流,需要来自Java Runtime的元信息才能重建java对象。如果系统中没有这种元信息,您必须自己添加这些信息,这很乏味且容易出错。我是第二个发送XML的想法 - 这就是发明XML序列化的原因:)

答案 2 :(得分:1)

另一种非常快速的语言无关序列化方法是protobuf。原始文件(描述数据结构的元文件)使用protoc编译,protoc为各种目标语言编写IO代码。

我在我的应用中使用它并做了一些benchmarking,这可能会给你一个线索,如果它符合你的目的。 我所知道的唯一缺点是protobuf根本不处理引用。如果你的一个对象包含两次相同的对象,那么它将被写入两次而不是仅仅一次引用前一个实例(Java序列化就是这种情况)。

关于您的原始问题,我同意Thorbjørn的看法,读取和编写序列化Java对象将会非常困难并且容易出错。

如果您考虑采用protobuf方式,请随时使用this logging event protobuf file作为首发。

答案 3 :(得分:0)

json是解决这类问题的最好方法。

答案 4 :(得分:0)

Log4cxx是C ++的Log4j端口,也许你可以从中收集一些想法甚至直接使用它?

答案 5 :(得分:-1)

JSON! JSON! JSON! JSON!