Java 我如何知道我的GCM消息是否足够小(<;4kb)以便发送?(如何获得字符串的大小?)

Java 我如何知道我的GCM消息是否足够小(<;4kb)以便发送?(如何获得字符串的大小?),java,android,string,google-cloud-messaging,Java,Android,String,Google Cloud Messaging,我想将数据直接嵌入GCM(谷歌云消息)中,以帮助我的应用程序跳过到服务器的往返过程 谷歌表示,总的数据负载需要在4kb以内。使用[键,值]对发送数据。假设我做了这样的事情: String key = "key"; String data = "data"; Message message = new Message.Builder().addData(key, data).build(); sender.send(message, regId, 5); 如何知道字符串数据是否小于4kb

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

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

 String key = "key";
 String data = "data";
 Message message = new Message.Builder().addData(key, data).build();
 sender.send(message, regId, 5);
如何知道
字符串数据
是否小于4kb?据我所知,无法真正执行
String.getSize()
或类似操作

如有疑问,请链接至文档:

已更新

int byteSize = data.getBytes("UTF-8").length // if you want to know the size in your desired encoding

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

String s = "some text here";
byte[] b = s.getBytes("UTF-8");
int bytes = b.length;
请确保指定
字符串的编码,因为不同的编码可能会占用相同字符串的不同字节数。在上述示例中,
UTF-8
用作编码

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


编辑:Geobits的评论提供了一个关于Java中不同编码的字节空间的详细答案。

我在本地运行了两个测试,似乎在应用程序端,您可以发送一个包含大约4020字节的密钥+值对的包,然后再开始从gcm中获取错误,而在服务器端,则需要更多,大约4100字节。
考虑到这一点,为了安全起见,我们决定两边各使用4000字节。

并非所有编码都是这样。我确实读过Java中的char是2字节,但正如Raghav所说,这似乎不是100%正确的。我想这个答案可能会给我一个估计,但要100%的准确,我必须找出编码的类型,对吗?你可以设置你想要使用的编码类型。请看我的答案。对不起,我指的是谷歌解释直接将数据嵌入GCM的文档。我想你正在寻找。注意,您必须查看addData()方法的静态类。如果使用发送消息,请注意它会抛出一个
IOException
。如果消息太大,它抛出一个
IOException
,问题的答案可能归结为
try
it。我使用的是
sender.send(…)
,而不是
sender.post(…)
。你说得对,我可以试试。我希望得到更多关于“我如何知道”的官方指导,以便在它太大的情况下,我能优雅地处理它。我刚才意识到你的意思是“尝试”
它,而不是“只是尝试”它,就像看看它是否有效一样,哈哈。这就是为什么我们的交换毫无意义。接受答案是因为不同编码的字节空间链接。
String s = "some text here";
byte[] b = s.getBytes("UTF-8");
int bytes = b.length;