5

我想将数据直接嵌入到 GCM(谷歌云消息)中,以帮助我的应用程序跳过到我的服务器的往返行程。

谷歌表示,总数据负载需要在 4kb 以内。使用 [key,value] 对发送数据。假设我做了这样的事情:

 String key = "key";
 String data = "data";
 Message message = new Message.Builder().addData(key, data).build();
 sender.send(message, regId, 5);

我怎么知道是否String data小于 4kb?据我所知,没有办法真正做一个String.getSize()或类似的事情。

如果好奇,请链接到文档:http: //developer.android.com/training/cloudsync/gcm.html#embed

4

3 回答 3

5

您可以使用以下内容获取字符串的字节:

String s = "some text here";
byte[] b = s.getBytes("UTF-8");
int bytes = b.length;

确保您指定 的编码String,因为不同的编码可能会占用相同字符串的不同字节数。在上面的例子中,UTF-8被用作编码。

要将字节转换为 kB,只需除以1024.

编辑:这是Geobits 评论中关于 Java 中不同编码的字节空间的一个很好而详细的答案。

于 2012-10-18T17:55:21.013 回答
3
int byteSize = data.length() * 2  // each char is 2 byte

更新

int byteSize = data.getBytes("UTF-8").length // if you want to know the size in your desired encoding
于 2012-10-18T17:51:21.883 回答
0

我在本地运行了几个测试,似乎在应用程序端你可以发送一个包含大约 4020 字节的键 + 值对的包,然后你开始从 gcm 收到错误,而在服务器端它有点更多,关于4100 字节。鉴于此,为了安全起见,我们决定两边各使用 4,000 字节。

于 2014-09-19T06:34:37.020 回答