草庐IT

Output0Buffer

全部标签

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

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

java - -XX :+PrintCompilation output? 中的这个新列是什么

最近在使用-XX:+PrintCompilation(JDK8r111)检查方法编译时,我注意到一个新列没有出现在documentation中。我可以find关于主题:thiscolumn||v6001s3java.util.Hashtable::get(69bytes)60143java.lang.Character::toLowerCase(6bytes)60183java.io.UnixFileSystem::normalize(75bytes)602123java.lang.ThreadLocal::get(38bytes)602143java.lang.ThreadLocal

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 - Gradle Output Jar 没有 Main-Class

我有以下简单的build.gradle文件:applyplugin:'application'applyplugin:'java'mainClassName='com.kurtis.HelloGradle'下面的单个java文件位于src/main/java/com/kurtis/HelloGradle.java:packagecom.kurtis;publicclassHelloGradle{publicstaticvoidmain(String[]args){System.out.println("Hellogradle");}}但是,如果我运行gradlebuild,我会在bui

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.net.SocketException : No buffer space available

嗨,我有一个非常难看的问题:java.net.SocketException:没有可用的缓冲区空间(达到最大连接数?)它是客户端-服务器应用程序。客户端是WindowsXPSP232b,两block网卡coreduo。Java1.6。u7。应用程序为本地通信打开了几个服务器套接字,并为rmi到jboss服务器打开了几个客户端套接字。几小时/几天后!我无法打开任何新的客户端套接字来与服务器进行通信。服务器套接字仍然有效。Windowsnetstat显示130到150个连接。手动尝试时,我在~3500个连接后耗尽了缓冲区!我试过:检查我们使用的每个套接字,我们也将其关闭。在后台运行nets

java - c :out and print the output using $ 之间的区别

在JSTL中有两种打印输出的方法-和${theOutput}有什么区别?哪种方式更受欢迎?谢谢。 最佳答案 c:out和JSPEL这两种方法都会将输出显示到页面,但是有一个主要区别。c:out标签将自动转义xml输出,这可以防止跨站点脚本。使用JSPEL(第二个选项)不会转义输出。当显示用户输入的数据时,使用c:out标签而不是JSPEL来防止任何恶意数据输入显示在页面上。 关于java-c:outandprinttheoutputusing$之间的区别,我们在StackOverflow

java - eclipse `allow output folders for source folders`

在EclipseIDE中创建新的Java(不是JavaEE)项目时,我看到一个选项,上面写着Allowoutputfoldersforsourcefolders。那是干什么用的? 最佳答案 它允许为每个源文件夹定义一个单独的输出文件夹(即eclipse创建编译的.class文件的文件夹),而不是将所有源文件夹的所有.class文件存储在同一个输出文件夹中。 关于java-eclipse`allowoutputfoldersforsourcefolders`,我们在StackOverflo