java - 字节数组操作

标签 java compression bytearray

我有一个 ~30 长度的字节数组。
我正在寻找一种将此数据传递给具有以下要求的多个用户的方法:

1. 它必须简短.. 最多约 16 个字符。
2. 只接受可打印的字符(只有数字或只有字母会更好)。
3. 它必须是可打印的输出(保存到文件或使用套接字不是我想要的)。
4.(感谢Tudor)我希望能够解码回原来的数组

数组包含相当随机的数据,这使得这个问题很难破解。
我尝试了很多压缩方法,但到目前为止都没有成功。
压缩后我可能会将数据编码为 64 base 以使输出尽可能短(除非有更好的方法)

该项目基本上是用 java 编写的,但如果有其他语言的解决方案,我很乐意在这里介绍它。

提前致谢

最佳答案

真正的随机数据将使用与解码一样多的字节进行编码(如果不是更多的话)。

当您压缩数据时,您利用数据中固有的非随机结构来制作更随机但更小的东西。这就是为什么很难压缩已经压缩的数据的原因。

在您的情况下,您似乎想要将 30 * 8 位或 240 位编码为 16 * 6 位或 96 位。这意味着您的数据不能非常随机,至少要压缩 2.5 倍。每次都压缩这么多是很难做到的,而且你总是有可能压缩的字符串会比你开始时更大。您所能做的就是让这种情况不太可能发生。

除非您的数据不具有固有的可压缩性,否则您不能使用无损压缩(这是可逆的)如果有损压缩是一种选择,您仍然必须假设哪些信息会丢失。


如果您需要将代码与某些信息相匹配,您可以做的是生成一个随机的唯一代码并将其用作某些数据库的 key 。使用这种方法的好处是 key 可以尽可能短,前提是您永远不需要比您将生成的更多的唯一 key ,并且您也可以根据需要将尽可能多的信息与 key 相关联。

考虑到您的限制,我相信这是您的最佳选择。

关于java - 字节数组操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12552428/

相关文章:

java - junit,获取失败的方法名

java - 故障转移 Appender 备份 JMS Appender - 没有与元素故障转移相匹配的参数

java - 使用ByteBuddy Maven插件时如何注册MemberSubstitution?

java - 三元运算符返回值

ios - 在手机上进行第二次音频录制后未触发SampleDataEvent

python - 可逆元组压缩?

java - 使用 GzipInputStream 解压 byte[]

php - 如何压缩一组唯一的自然数并比较两个这样的集合?

flash - AS3在循环中使用Sound.extract分析声音文件

c - 抽象出这个过程是否值得?