我想使用Java确定以字节为单位的JSON Java字符串的数据大小。 此计算应与平台无关,因为该软件用于不同的系统和(可能的)不同的默认字符编码(Windows,Linux,zOS,...)。 JSON应该只包含可以使用UTF-8编码的字符。到目前为止,在所有使用情况中,只有字符可以由1个字节编码,但是,将来,中文字符,例如, (U + 20F2E),也被使用。
是否有一种以强大的方式计算数据大小的最佳实践方法?
据我了解,json.getBytes("UTF-8").length
似乎是一个有效的解决方案。
在Windows上测试输出:
这是一个1Byte UTF-8字符:
@
"@".length() -> 1
"@".getBytes().length -> 1
"@".getBytes("UTF-8").length -> 1
new String("@".getBytes("UTF-8")) -> @
"@".getBytes("UTF-16").length -> 4
new String("@".getBytes("UTF-16")) -> ��
这是一个2Byte UTF-8字符:
µ
"µ".length() -> 1
"µ".getBytes().length -> 2
"µ".getBytes("UTF-8").length -> 2
new String("µ".getBytes("UTF-8")) -> µ
"µ".getBytes("UTF-16").length -> 4
new String("µ".getBytes("UTF-16")) -> ��
这是一个4Byte UTF-8角色:
"".length() -> 2
"".getBytes().length -> 4
"".getBytes("UTF-8").length -> 4
new String("".getBytes("UTF-8")) ->
"".getBytes("UTF-16").length -> 6
new String("".getBytes("UTF-16")) -> ���c��
编辑: 应该计算“压缩”JSON的长度,即没有任何不必要的空格(来自漂亮的打印)。
答案 0 :(得分:0)
如果您的JSON可以作为字符串使用,并且所有空格都已修剪,String.getBytes(String charsetName).length
应该为您提供正确的大小。
请注意,在JVM内存中,字符串将以UTF-16编码,并且一旦写入文件或数据库,它就会使用不同的编码(UTF-8、8859-1 ...),因此具有不同的大小。