Java 字节数组操作
我有一个长度约为30字节的数组。Java 字节数组操作,java,compression,bytearray,Java,Compression,Bytearray,我有一个长度约为30字节的数组。 我正在寻找一种方法,将此数据传递给具有以下要求的多个用户: 1.它必须是短的。。最多16个字符。 2.只接受可打印字符(只有数字或字母更好)。 3.它必须是一个可打印的输出(保存到文件或使用套接字不是我想要的)。 4.(多亏了都铎)我想把它解码回原始阵列 数组包含非常随机的数据,这使得这个问题很难解决。 我已经尝试了很多压缩方法,但到目前为止运气不好。 压缩后,我可能会将数据编码到64位,以使输出尽可能短(除非有更好的方法) 该项目基本上是用jav
我正在寻找一种方法,将此数据传递给具有以下要求的多个用户:
1.它必须是短的。。最多16个字符。
2.只接受可打印字符(只有数字或字母更好)。
3.它必须是一个可打印的输出(保存到文件或使用套接字不是我想要的)。
4.(多亏了都铎)我想把它解码回原始阵列 数组包含非常随机的数据,这使得这个问题很难解决。
我已经尝试了很多压缩方法,但到目前为止运气不好。
压缩后,我可能会将数据编码到64位,以使输出尽可能短(除非有更好的方法) 该项目基本上是用java编写的,但如果有其他语言的解决方案,我很乐意在这里介绍一下
提前谢谢对不起,我不能很好地理解你的问题。你有30个二进制字节,你想把它们编码成一个长度小于16字节的可打印字符串吗?如果是的话,我会说这是不可能的…但也许我只是不明白这个问题 如果30个字节可以包含所有255个可能值,那么在所有可能的情况下都无法将它们压缩到16个字节。这不是java问题,只是数学问题。相反,如果你的字节可以有一个值的子集,那么也许你可以做些什么,这取决于子集需要多少位。要从30个字节减少到16个字节,如果希望在数组中存储随机字节序列,则每个字节最多可以处理4位,即16个字符的子集。您的问题(在以后编辑时): 我有一个长度约为30字节的数组。我正在寻找一种方法来通过这个 向具有以下要求的多个用户发送数据:
随机数据是不可压缩的。我相信一个字符可以是1或2个字节,也就是说:16个字符=16-32个字节。一个解决方案可能是定义自己的字母表,如果您可以将字符限制为仅按字母顺序排列,那么每个字节只需要5位(26个字母),因此每5个字节可以存储8个字母。将字符转换为您自己的规范,解码时只需每5位拆分一次。真正的随机数据将使用与解码相同的编码字节数(如果不是更多的话) 压缩数据时,利用数据中固有的非随机结构来生成更随机但更小的内容。这就是为什么压缩已经压缩的数据非常困难的原因 在您的情况下,您似乎希望将30*8位或240位编码为16*6位或96位。这意味着您的数据必须不是非常随机的,才能将其压缩至少2.5倍。每次压缩这么多都是非常困难的,而且压缩后的字符串可能会比开始时大。你所能做的就是让这不太可能 除非您的数据没有固有的可压缩性,否则您不能使用无损压缩(这是可逆的)。如果有损压缩是一种选择,您仍然必须对可能丢失的信息做出假设
如果您需要将一个代码与一些信息进行匹配,您可以做的是生成一个随机的唯一代码,并将其用作某个数据库的密钥。使用这种方法的好处是,密钥可以尽可能短,前提是您永远不需要比生成的密钥更多的唯一密钥,并且您可以根据自己的喜好将尽可能多的信息与密钥关联
考虑到您的限制条件,我相信这是您的最佳选择。因此,您有一个30字节的数组,您希望将其减少为16字节的字符数组?但是,您还希望能够将其解码回原来的右侧?当然可以。我忘了提这件事。。对不起,你为什么要这个?你想实现什么?我不明白,你能举一个简短的例子吗?当你得到你想要“压缩”的字符数组时,你把每个字母,通过一个方法运行它,这个方法在你的自定义位字母表中返回它的值(例如,a可以返回00001,B 00010,C 00011等等)。用户应该键入这个这就是为什么我只能使用可打印字符(以及为什么它必须尽可能短)。好的,那么使用unicode中的各种奇怪符号可能不是一个好主意,因为只有很少的符号易于键入。如果您知道您最多只有,比如说一百万个不同的代码,只需为每个代码指定一个序列号,然后将该数字打印给您的用户。或者,为您的用户提供传输的可能性g这个号码在他们的手机上。比如说可能有二维码吗?嘿,彼得,在男人之后