我想知道如何将Protobuf Any Type转换为原始的Protobuf消息类型,反之亦然.从Message到Any的Java很容易:
Any.Builder anyBuilder = Any.newBuilder().mergeFrom(protoMess.build());
Run Code Online (Sandbox Code Playgroud)
但是我怎样才能解析出任何回到原始信息(例如"protoMess"的类型)?我可以解析一下流上的所有内容,只是为了重读它,但那不是我想要的.我希望有这样的转变:
ProtoMess.MessData.Builder protoMessBuilder = (ProtoMess.MessData.Builder) transformToMessageBuilder(anyBuilder)
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?它已经为Java实现了吗?该的Protobuf语言指南说,有包并解压方法,但有没有在Java中.先感谢您 :)
我想知道numpy数组的自定义属性如何传播,即使数组通过类似的函数np.fromfunction.
例如,我的类ExampleTensor定义了一个attr默认设置为1 的属性.
import numpy as np
class ExampleTensor(np.ndarray):
def __new__(cls, input_array):
return np.asarray(input_array).view(cls)
def __array_finalize__(self, obj) -> None:
if obj is None: return
# This attribute should be maintained!
self.attr = getattr(obj, 'attr', 1)
Run Code Online (Sandbox Code Playgroud)
ExampleTensor实例之间的切片和基本操作将维护属性,但使用其他numpy函数则不会(可能因为它们创建了常规的numpy数组而不是ExampleTensors).我的问题:当从子类化的numpy数组实例构造常规numpy数组时,是否存在一个持久化自定义属性的解决方案?
重现问题的示例:
ex1 = ExampleTensor([[3, 4],[5, 6]])
ex1.attr = "some val"
print(ex1[0].attr) # correctly outputs "some val"
print((ex1+ex1).attr) # correctly outputs "some val"
np.sum([ex1, ex1], axis=0).attr # Attribute Error: 'numpy.ndarray' object has no attribute 'attr'
Run Code Online (Sandbox Code Playgroud) 我目前正在使用具有可移动和可调整大小的视图的仪表板.我现在的问题是我想通过触摸手势调整视图大小.因此,我想到了一个Point,我将其添加到选择视图中,可以拖动它以调整所选视图的大小.这类似于Android主屏幕上的调整大小过程.
即使经过长时间的研究,我也无法想出如何覆盖另一个具有自己的DragListener的视图的解决方案.我可以想象将选定的视图和点放入一个ViewGroup并让Point覆盖View.有人有这个问题的经验吗?先感谢您.
我想知道如何在 numpy 中使用dtype=object. 我已经同态加密的被封装在一个类的数字Ciphertext为我所重写基本的数学运算符,例如__add__,__mul__等等。
我创建了 numpy 数组,其中每个条目都是我的类的一个实例,Ciphertext并且 numpy 了解如何广播加法和乘法运算就好了。
encryptedInput = builder.encrypt_as_array(np.array([6,7])) # type(encryptedInput) is <class 'numpy.ndarray'>
encryptedOutput = encryptedInput + encryptedInput
builder.decrypt(encryptedOutput) # Result: np.array([12,14])
Run Code Online (Sandbox Code Playgroud)
但是,numpy 不会让我做矩阵乘法
out = encryptedInput @ encryptedInput # TypeError: Object arrays are not currently supported
Run Code Online (Sandbox Code Playgroud)
考虑到加法和乘法有效,我不太明白为什么会发生这种情况。我想这与 numpy 无法知道对象的形状有关,因为它可能是一个列表或一些花哨的东西。
天真的解决方案:我可以编写自己的类来扩展ndarray和覆盖__matmul__操作,但我可能会失去性能,而且这种方法需要实现广播等,所以我基本上会重新发明轮子,以获得正确的东西现在。
问题:如何在数组上使用 numpy 提供的标准矩阵乘法,dtype=objects其中对象的行为与数字完全相同?
先感谢您!
我有一个程序,用Java中的Protobuf序列化数据,在byte [] Array中写入二进制数据,然后将其保存在".txt"文件中.我在字符串流中接收C++端的数据.现在我想用C++解析那个二进制数据,但是Protobuf-Parsing-Method"parseFromString()"不起作用!我的测试消息中的字段未设置.我为此写了一个小测试,我可以给你看一些代码:
Java序列化
byte[] s = test.build().toByteArray(); //This is serialized to "C:\test.txt" as binary
Run Code Online (Sandbox Code Playgroud)
C++解析:
Test t1; // My Protobuf Message
std::ifstream myFile("C:\\test.txt");
std::string s;
myFile >> s;
t1.ParseFromString(s);
std::cout << "Decoded: " << t2.s() << std::endl; // Check if parsing was correct
Run Code Online (Sandbox Code Playgroud)
但它只是返回:"解码:",好像t2是空的,但它不应该!如何用C++解析二进制数据?