【问题标题】:How do I read a java object in C++?如何在 C++ 中读取 java 对象?
【发布时间】:2010-11-28 08:33:33
【问题描述】:

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

【问题讨论】:

    标签: java c++ logging log4j


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      序列化的 java 对象是一个字节流,它需要来自 Java 运行时的元信息才能重建 java 对象。如果系统中没有可用的元信息,您必须自己添加该信息,这既乏味又容易出错。我赞同发送 XML 的想法——这就是 XML 序列化的发明目的:)

      【讨论】:

        【解决方案3】:

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

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

        关于您最初的问题,我同意 Thorbjørn 的观点,即读取和写入序列化的 Java 对象太难且容易出错。

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

        【讨论】:

          【解决方案4】:

          json 是解决此类问题的最佳方法。

          【讨论】:

            【解决方案5】:

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

            【讨论】:

              【解决方案6】:

              JSON! JSON! JSON! JSON!

              【讨论】:

              • log4j 没有直接的 JSON appender。
              • 我认为他们应该使用 JSON。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-04-12
              • 1970-01-01
              • 2019-04-09
              • 2011-12-06
              • 2014-12-09
              • 1970-01-01
              相关资源
              最近更新 更多