【问题标题】:How do i know if my GCM Message is small enough (< 4kb) to send? (How to get size of String?)我如何知道我的 GCM 消息是否足够小(< 4kb)可以发送? (如何获得字符串的大小?)
【发布时间】:2012-10-18 17:48:54
【问题描述】:

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

Google 表示总数据负载需要在 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

【问题讨论】:

  • 抱歉,我指的是 Google 的文档,解释了将数据直接嵌入到 GCM 中。
  • 我认为您正在寻找this。请注意,您必须查看静态类 Message.Builder 的 addData() 方法。
  • 例如如果使用Sender.post(..) 发送消息,请注意它会抛出IOException。如果它在消息过大时抛出IOException,则问题的答案可能归结为try
  • 我使用的是sender.send(...),而不是sender.post(...)。你说得对,我可以试试。我希望在官方“我如何知道”方面获得更多指导,以便在它太大的情况下,我可以优雅地处理它。
  • 我刚才意识到你的意思是try,而不是“试试看”,看看它是否有效,哈哈。这就是为什么我们的交流毫无意义。

标签: java android string google-cloud-messaging


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 接受答案,因为链接到不同编码的字节空间。
【解决方案2】:
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

【讨论】:

  • 并非所有编码都如此。
  • 我确实读过一个 char 在 Java 中是 2 个字节,但正如 Raghav 所说,这似乎不是 100% 正确的。我认为这个答案可能会给我一个估计,但要做到 100%,我必须找出编码的类型,对吗?
  • 您可以设置您要使用的编码类型。看我的回答。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    • 2013-08-19
    相关资源
    最近更新 更多