2016-04-14 13 views
4

protogenツールを使用した後、私がメッセージを送信するためのメッセージタイプがあります。プロトコルバッファを使用してバイナリデータを送信する正しい方法は何ですか?

type File struct { 
    Info string `protobuf:"bytes,1,opt,name=info,json=info" json:"info,omitempty"` 
    BytesValues []byte `protobuf:"bytes,2,opt,name=bytes_values,json=bytesValues,proto3" json:"bytes_values,omitempty"` 
} 

を、私はそうのようなBytesValuesフィールドを使用して、いくつかのバイナリデータを送信しようとしています:

filePath := filepath.Join("test", "myfile.bin") 

f, _ := ioutil.ReadFile(filePath) // error return value ignored for brevity 

msg := File{BytesValues: f} 

body, _ := proto.Marshal(msg) // encode 

サーバがいるようです私はそれに送信しているメッセージを解読する際に問題があります。これは、プロトコルバッファを使用して[]byteフィールドを使用してバイナリデータを送信する正しい方法ですか?

+0

protobufを使用してprotobufを使用して大量のデータを敗北させる*の実際の目的*を使用しないでください。 protobufのRPCソケット情報をエンコードする方法と、サービスが代わりにファイルを転送する方法はありますか? – eduncan911

+0

サーバーの応答は何ですか? – Sean

+0

@ eduncan911私は通信しようとしているサーバがApache Phoenixのクエリサーバで使用されているAvatica(Apache Calciteの一部)であるため、手で結ばれています。 – F21

答えて

0

私の場合、問題は実際にサーバーが正しいフィールドから生のバイトを読み取っていないことでした。

生のバイトを送信する正しい方法は、バイトをフィールドに設定することです。プロトコルバッファはバイナリ形式なので、バイトを何らかの方法でエンコードする必要はありません。

filePath := filepath.Join("test", "myfile.bin") 

f, _ := ioutil.ReadFile(filePath) // error return value ignored for brevity 

msg := File{BytesValues: f} 

body, _ := proto.Marshal(msg) // encode 
関連する問題