给定一个对象byte[]
,当我们要使用该对象进行操作时,通常需要其中的一部分。在我的特定示例中,我byte[]
从线路获取信息,其中前4个字节描述了消息的长度,然后另外4个字节描述了消息的类型(一个映射到具体protobuf类的整数),然后剩下的byte[]
就是消息的实际内容……像这样
length|type|content
为了解析此消息,我必须将内容部分传递给知道如何从中解析实例的特定类...问题是通常没有提供任何方法,以便您可以指定解析器应从何处读取内容。大批...
所以我们最终要做的是复制该数组的其余块,这是无效的...
据我在Java中所知,不可能创建另一个byte[]
引用,该引用实际上只引用一些byte[]
只有2个索引的原始较大数组(这是使用String的方法导致内存泄漏)...
我想知道我们如何解决这种情况?我想放弃protobuf只是因为它没有提供一些parseFrom(byte[], int, int)
没有意义的东西... protobuf只是一个例子,任何东西都可能缺少该api ...
那么这是否迫使我们编写效率低下的代码,或者有什么可以做的?(从添加该方法可知)
在Java中,数组不仅仅是内存的一部分-它是一个对象,具有一些其他字段(至少-长度)。因此,您不能链接到数组的一部分-您应该:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句