在Android平台上有效地发送带有http的协议缓冲消息

时间:2010-03-16 20:53:29

标签: android http protocol-buffers

我正在尝试通过简单的HTTP方案将Google协议缓冲区代码生成的消息发送到服务器。我目前已经实现的是(原谅显而易见的未完成......):

 HttpClient client = new DefaultHttpClient();
 String url = "http://192.168.1.69:8888/sdroidmarshal";
 HttpPost postRequest = new HttpPost(url);

 String proto = offers.build().toString();
 List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
 nameValuePairs.add(new BasicNameValuePair("sdroidmsg", proto));

 postRequest.setEntity(new UrlEncodedFormEntity(nameValuePairs));

 try {
   ResponseHandler<String> responseHandler = new BasicResponseHandler();
   String responseBody = client.execute(postRequest, responseHandler);

 } catch (Throwable t) {

 }

我不是那种通过互联网进行通信的经验,而不是通过HTTP进行通信 - 虽然我对基础知识有所了解...所以我的问题,在我盲目地开发其余的应用程序之前,是否是这特别有效吗?理想情况下,我希望保持消息的小,我假设toString()添加了一些不必要的格式。

1 个答案:

答案 0 :(得分:2)

Message.toString()打印出文本(非序列化)表示。您可能希望使用ToByteString()ToByteArray()来获取序列化版本,然后将其传递给您的URLencoder。 当然,这会产生URL编码的一些开销。如果您可以处理多部分/表单数据样式的POST,那么您可以直接将字节作为文件部分附加,使用application/octet-stream MIME类型;这样你将发送尽可能小的消息,并且不必担心任何一端的URL编码/解码。