草庐IT

thrift-protocol

全部标签

java - Protocol Buffer : get byte array from ByteString without copying

假设我有一个方法voidfoo(byte[]bytes)需要一个字节数组作为它的参数。但是,Protobuf中字节数组的Java类型是ByteString。我可以使用byte[]toByteArray()获取字节数组。但问题是这种方法使用copy来构建一个新的数组,代价比较大。我宁愿它直接返回底层数组,或者返回一个View。是否有任何API,或者性能损失是可以接受的? 最佳答案 通常这是不可能的,因为在ByteString的某些子类中可能没有这样的数组。BoundedByteString可以包含更大的数组,因此需要复制才能获得正确大

java - Spring Boot 测试 MalformedURLException : unknown protocol: classpath

如果在SpringBoot应用程序中使用java.net.URL,使用classpath协议(protocol),它会按预期工作,因为SpringBoot注册了URLStreamHandlerFactory。例如新URL("classpath:someFile.whatever")。但当此代码作为JUnit测试执行时,java.net.MalformedURLException:unknownprotocol:classpath异常被抛出。当为JUnit测试初始化​​Spring上下文时,似乎没有注册适当的URLStreamHandlerFactory。重现步骤:1)创建SpringB

java - 我想在一种交通工具上使用多种服务(Thrift)

我想创建几个服务,我想用不同的标识符来使用它们。所以我的意思是:我有一个用户和项目服务。我想同时使用这些。我的意思是我可以向xmlrpc上的“处理程序映射”添加更多“服务”。http://ws.apache.org/xmlrpc/server.htmlphm.addHandler("Users",Users.class);phm.addHandler("Projects",Projects.class);我想在储蓄所做同样的事情。这是一个简单的例子:测试节俭typedefi64UserIdstructBonk{1:stringmessage,2:i32type}structInsani

java - Protocol Buffer Java RPC 栈

根据this维基百科词条:“ProtocolBuffers与Facebook的Thrift协议(protocol)非常相似,只是它不包含用于定义服务的具体RPC堆栈。自从ProtocolBuffers开源以来,出现了许多RPC堆栈来填补这一空白”但是没有引用RPC栈的例子。谁能建议基于Java的RPC堆栈实现? 最佳答案 如果你想要基于Java的RPC堆栈,它是RMI.但是,它不能很好地跨平台工作。我一直在使用ProtoBuf做RPC。您几乎可以通过将protobuf消息包装在另一个定义服务或调用的protobuf中来模拟RPC堆栈

java - Protocol Buffer 3 : Enums as keys in a map

枚举不允许用作映射中的键。这里的PaxType是一个枚举,不允许用作键。enumPaxType{ADULT=0;CHILD=1;INFANT=2;}messageFlightData{mapfareType=1;} 最佳答案 这是不允许的,因为它不能很好地与proto3开放枚举语义兼容。例如,在Java中,如果您有一个Map,则键只能是定义的值之一。如果您碰巧从远程客户端/服务器接收到不在定义值集中的枚举键值,则无法将其放入Map中。此限制迫使我们要么删除具有未知枚举键的映射条目(这违反了proto3开放枚举语义),要么禁止枚举作为

java - 提高 Protocol Buffer 的性能

我正在编写一个应用程序,需要从单个文件中快速反序列化数百万条消息。应用程序所做的基本上是从文件中获取一条消息,做一些工作然后丢弃该消息。每条消息由大约100个字段组成(并非所有字段都始终被解析,但我需要所有字段,因为应用程序的用户可以决定他想处理哪些字段)。此时,应用程序包含一个循环,在每次迭代中仅使用readDelimitedFrom()调用执行。有没有办法优化问题以更好地适应这种情况(拆分为多个文件等...)。此外,在这一刻,由于消息的数量和每条消息的尺寸,我需要对文件进行gzip压缩(由于字段的值非常重复,它在减小大小方面相当有效)——虽然这减少了性能。

java - Protocol Buffer 和枚举组合?

这是我的原型(prototype)文件:messageMSG{requiredMsgCodesMsgCode=1;optionalint64Serial=2;//UniqueIDnumberforthisperson.requiredint32From=3;requiredint32To=4;//blabla...enumMsgCodes{MSG=1;FILE=2;APPROVE=4;ACK=8;ERROR_SENDING=16;WORLD=32;}}在我的C#中,我正在尝试:msg=msg.ToBuilder().SetMsgCode(msg.MsgCode|MSG.Types.Ms

java - 我应该如何解决 java.lang.IllegalArgumentException : protocol = https host = null Exception?

我正在开发一个SSL客户端服务器程序,我必须重用以下方法。privatebooleanpostMessage(Stringmessage){try{StringserverURLS=getRecipientURL(message);serverURLS="https:\\\\abc.my.domain.com:55555\\update";if(serverURLS!=null){serverURL=newURL(serverURLS);}HttpsURLConnectionconn=(HttpsURLConnection)serverURL.openConnection();conn

javascript - Apache Thrift Java-Javascript 通信

我正在编写一个基于ApacheThrift的Java服务器,它将从Javascript客户端接收数据。我已经完成了Java服务器,但问题是我可以获得Javascript客户端的工作示例(我无法找到一个好的示例)。构建文档中的示例不是很有帮助。我当前的Javascript客户端如下:functiontestServer(){try{vartransport=newThrift.Transport("http://127.0.0.1:9090");varprotocol=newThrift.Protocol(transport);varclient=newJavaEventClient(p

java.sql.SQLNonTransientConnectionException : org. apache.thrift.transport.TTransportException : Frame size larger than max length (16384000)!

我在IntellyJ中有一个带有CassandraDB的java项目,我使用的是Maven3和Java7。Cassandra版本是2.0.6。我有一个包含近100,000行的表。当我运行该程序时,出现此异常:java.sql.SQLNonTransientConnectionException:org.apache.thrift.transport.TTransportException:Framesize(16858796)largerthanmaxlength(16384000)!atorg.apache.cassandra.cql.jdbc.CassandraStatement.