Java 字节数组的最短字符串编码

Java 字节数组的最短字符串编码,java,encoding,Java,Encoding,我有一段生成UBJSON字节数组的代码 UBObject obj = UBValueFactory.createObject(); obj.put("appId", UBValueFactory.createString("70cce8adb93c4c968a7b1483f2edf5c1")); obj.put("apiKey", UBValueFactory.createString("a65d8f147fa741b0a6d7fc43e18363c9")); obj.put("entityTy

我有一段生成UBJSON字节数组的代码

UBObject obj = UBValueFactory.createObject();
obj.put("appId", UBValueFactory.createString("70cce8adb93c4c968a7b1483f2edf5c1"));
obj.put("apiKey", UBValueFactory.createString("a65d8f147fa741b0a6d7fc43e18363c9"));
obj.put("entityType", UBValueFactory.createString("Todo"));
obj.put("entityId", UBValueFactory.createString("2-0"));
obj.put("blobName", UBValueFactory.createString("blobName"));

ByteArrayOutputStream out = new ByteArrayOutputStream();
UBWriter writer = new UBWriter(out);
try {
    writer.write(obj);
    writer.close();
} catch (IOException e) {
    e.printStackTrace();
}

// Byte array of UBJSON
byte[] ubjsonBytes = out.toByteArray();

问题是,这里可以对字节数组进行的最短字符串编码是什么,可以通过HTTP URL使用和传输?使用Base64可以完美地作为URL路径或查询参数,但会产生相当长的字符串

根据输入长度和其他属性,在使用Base64编码
字节[]
之前,您可能希望尝试使用gzip压缩输入。通常使用的是:

因此,存在URL变体的修改Base64(如RFC 4648中的base64url),其中标准Base64的
+
/
字符分别被
-
\
替换,因此不再需要使用URL编码器/解码器,也不会影响编码值的长度,保留相同的编码表单,以便在关系数据库、web表单和对象标识符中使用

一些变体允许或要求省略填充符号
=
以避免与字段分隔符混淆,或者要求对任何此类填充进行百分比编码。一些库将
=
编码为
,当从用户数据编码文件夹名称时,应用程序可能会受到相对路径攻击

您可以尝试使用可更改URL含义的字符编码,例如
&
。这可能适用于您的设置,也可能不适用于您的设置,并且可能取决于反向代理配置之类的内容。因此,最好使用Base64这样的安全编码

总之,长数据应该进入请求体,而不是URL