【发布时间】:2011-06-15 18:56:09
【问题描述】:
我将使用一种算法对从 XML 文件中检索到的可变长度但很长的 String 字段进行编码,然后将该编码数据保存在数据库中。
稍后,当我收到第二个文件时,我需要从数据库(之前存储的)中获取编码数据,然后对其进行解码并使用新数据进行验证以进行重复。
我试过org.apache.commons.codec.binary.Base64类
它有两种方法:
encodeBase64(Byte[] barray)decodeBase64(String str)
效果很好,解决了我的问题。 但它将 55 个字符的字符串转换为 6 个字符的字符串。
所以我想知道这些算法是否会在任何情况下将 2 个非常大且只有 1 个字符不匹配(例如)的字符串编码到相同的编码字节数组中。
我不太了解Base64 课程,但如果有人可以帮助我,那将非常有帮助。
如果您可以建议任何其他算法,使大字符串短于固定长度并解决我的目的,我将很乐意使用它。
提前致谢。
【问题讨论】:
-
base64 的任何正确实现都会使字符串变大而不是变小。你想压缩字符串吗?
-
是的,实际上我需要一些算法来将长字符串压缩成较小的字符串并存储在数据库中,然后对其进行膨胀以获得原始字符串。我在网上看到了ZipOutputStream类的实现,但没试过。
-
我认为您正在寻找诸如 MD5 之类的哈希函数(它将所有输入转换为 128 字节的输出)。 Base64 编码通常会产生输入大小的三分之四的输出 - 所以它根本不会产生固定长度的输出。
-
好的,我明白了。那么你建议用什么算法来解决我的问题?你能给我一个链接到任何例子吗
-
您是否只是想确定输入字符串是否已存储在数据库中?如果是这样,选择适当的散列函数并存储散列值可能就足够了。不同的哈希函数具有不同的特性(性能、冲突的可能性等),您需要进行一些研究以选择适合您需求的一种。
标签: java encoding base64 apache-commons-codec string-decoding