- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个问题。
我正在使用 RabbitMq 将消息从 C++ 发送到 Java(Play 框架)。因此,在 C++ 方面,我使用了 SerializeToString
函数(也尝试了 SerializeToArray
和 char*
)。 ParseFrom 在使用 String
或 byte []
的 Java 中不起作用。
详细信息:在我的消息中,我发送了 base64 图像,超过 500k 个字符作为 String
。错误是:
CodedInputStream 遇到了声称具有负大小的嵌入字符串或消息
没有 base64 字符串和其他属性的消息,ParseFrom
可以正常工作。
这里是完整的错误:
play.api.http.HttpErrorHandlerExceptions$$anon$1: Execution exception[[InvalidProtocolBufferException: CodedInputStream encountered an embedded string or message which claimed to have negative size.]]
at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:323)
at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:243)
at play.core.server.AkkaHttpServer$$anonfun$1.applyOrElse(AkkaHttpServer.scala:382)
at play.core.server.AkkaHttpServer$$anonfun$1.applyOrElse(AkkaHttpServer.scala:380)
at scala.concurrent.Future.$anonfun$recoverWith$1(Future.scala:417)
at scala.concurrent.impl.Promise.$anonfun$transformWith$1(Promise.scala:41)
at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:64)
at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:55)
at akka.dispatch.BatchingExecutor$BlockableBatch.$anonfun$run$1(BatchingExecutor.scala:91)
at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
Caused by: com.google.protobuf.InvalidProtocolBufferException: CodedInputStream encountered an embedded string or message which claimed to have negative size.
at com.google.protobuf.InvalidProtocolBufferException.negativeSize(InvalidProtocolBufferException.java:92)
at com.google.protobuf.CodedInputStream$ArrayDecoder.pushLimit(CodedInputStream.java:1179)
at com.google.protobuf.CodedInputStream$ArrayDecoder.readMessage(CodedInputStream.java:881)
at model.RequestOrResponse$Response.dynamicMethod(RequestOrResponse.java:1542)
at com.google.protobuf.GeneratedMessageLite.parsePartialFrom(GeneratedMessageLite.java:1597)
at com.google.protobuf.GeneratedMessageLite.parsePartialFrom(GeneratedMessageLite.java:1630)
at com.google.protobuf.GeneratedMessageLite.parseFrom(GeneratedMessageLite.java:1746)
at model.RequestOrResponse$Response.parseFrom(RequestOrResponse.java:1232)
at controllers.SubjectController.get(SubjectController.java:195)
at router.Routes$$anonfun$routes$1.$anonfun$applyOrElse$14(Routes.scala:187)
最佳答案
在 ParseFrom
之前尝试在 C++ 端编码 base64 并在 Java 端解码。
阅读更多 here
关于java - 在 C++ 的 Java 中失败 ParseFrom 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55954550/
本文整理了Java中us.ihmc.robotDataLogger.handshake.YoVariableHandshakeParser.parseFrom()方法的一些代码示例,展示了YoVari
我正在尝试将 protobuf 数据从 cpp 端发送到 java 端。 我在 .proto 中定义了多种消息类型 在 Cpp 端,我有每个消息类型的枚举,我将它添加到 buf 输出中,如下所示: u
我似乎找不到 MessageLite 的 MergeFrom* 和 ParseFrom* 方法之间的明确区别。 protobuf 中的类。 我试图尽量减少我必须做的数据复制量,所以我在下面编写了以下代
我只想使用 protobuf 和 java 创建 echo 服务器/客户端。 我用 protobuf-java-2.4.1 和 jdk1.7 测试过。 我写了如下回显服务器代码 // create s
我正在调用一个 api 来获取输入流,然后调用静态方法 parseFrom(inputstream) 将其转换为 protobuffclass。 如果我用一个特定的类来做它会起作用: public C
我有一个问题。 我正在使用 RabbitMq 将消息从 C++ 发送到 Java(Play 框架)。因此,在 C++ 方面,我使用了 SerializeToString 函数(也尝试了 Seriali
我是一名优秀的程序员,十分优秀!