ReadRawVarint32() 的问题 - Google Protocol Buffers csharp-port

Posted

技术标签:

【中文标题】ReadRawVarint32() 的问题 - Google Protocol Buffers csharp-port【英文标题】:Problems with ReadRawVarint32() - Google Protocol Buffers csharp-port 【发布时间】:2011-11-02 14:17:15 【问题描述】:

我正在尝试使用 Google 协议缓冲区(具体而言,Jon Skeet 的 csharp-port)从服务器中的客户端接收一些数据。我执行以下操作:

using Google.ProtocolBuffers;
...
Stream InputStream = client.GetStream();
CodedInputStream input = CodedInputStream.CreateInstance(InputStream);
...
uint length = CodedInputStream.ReadRawVarint32(InputStream);

我从最后一行收到一条我无法解决的错误消息:需要对象引用才能访问非静态成员 'Google.ProtocolBuffers.CodedInputStream.ReadRawVarint32()'。

基本上我想做的在java版本中是这样的:

InputStream iStream = client.getInputStream();
CodedInputStream input = CodedInputStream.newInstance(iStream);
int read = is.read();
if(-1 != read) 
    int length = CodedInputStream.readrawVarint32(read, is);
    byte[] bytes = input.readRawBytes(length);
    // My proto stuff
    Communication.Packet container = null;
    try 
        container = Communication.Packet.parseFrom(bytes);
     catch (InvalidProtocolBufferException iPBE) 
        continue;
    
    AbstractMessage message = container;
    if(container.hasLogin()) 
        message = container.getLogin();
    
    System.out.println(message.toString());

有什么帮助吗?

提前致谢。

【问题讨论】:

【参考方案1】:

错误消息表明您正在尝试访问非静态(即成员方法)而不使用对象引用。您需要更改您的方法调用以操作 CodedInputStream 类型的对象,而不是 CodedInputStream 类:

input.ReadRawVarint32();

【讨论】:

以上是关于ReadRawVarint32() 的问题 - Google Protocol Buffers csharp-port的主要内容,如果未能解决你的问题,请参考以下文章

用 64 位 g++ Fedora 编译 32 位

g++ -m32 在 debian amd64 上找不到 libstdc++

将 32 位和 64 位 .so 文件与 g++ 链接以用于 c++ 程序

使用 g++ -march=x86-64 构建的代码可以在 32 位操作系统上运行吗?

[乐意黎原创] 优盘硬盘等标称的16G, 32G, 64G, 128G, 256G内存容量,实际有多大?

如何强制 Eclipse CDT MinGW 工具链使用 mingw32-g++.exe?