繁体   English   中英

我怎么知道我的 GCM 消息是否足够小 (< 4kb) 可以发送? (如何获取字符串的大小?)

[英]How do i know if my GCM Message is small enough (< 4kb) to send? (How to get size of String?)

我想将数据直接嵌入到 GCM(Google Cloud Message)中,以帮助我的应用程序跳过与服务器的往返行程。

谷歌表示总数据有效载荷需要在 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

您可以使用以下方法获取字符串的字节:

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM