加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

vb.net – 是否有比DotNetZip或LZMA更好的字符串压缩库?

发布时间:2020-12-17 00:07:23 所属栏目:大数据 来源:网络整理
导读:我有一个超过800个字符的数据字符串,我正在尝试压缩以用于QR码(我想要至少50%,但如果我把它减少到不到七百,可能会很高兴) .这是我正在尝试压缩的示例字符串,包含841个字符: +hgoSuJm2ecydQj9mXXzmG6b951L2KIl0k9VGzIEtLztuWO2On9rt7DUlH0lXzG4iJ1yK0fA97mD
我有一个超过800个字符的数据字符串,我正在尝试压缩以用于QR码(我想要至少50%,但如果我把它减少到不到七百,可能会很高兴) .这是我正在尝试压缩的示例字符串,包含841个字符:
+hgoSuJm2ecydQj9mXXzmG6b951L2KIl0k9VGzIEtLztuWO2On9rt7DUlH0lXzG4iJ1yK0fA
97mDyclKSttIZXOxSPBf85LEN4PUUqj65aio5qwZttZSZ64wpnMFg/7Alt1R39IJvTmeYfBm
Tuc1noMMcknlydFocwI8/sk2Sje5MR/nYNX0LPkQhzyi5vFJdrndqAgXYULsYrB3TJDAwvgs
Kw9C5EJnrlqcb21zg17O2gU/C8KY0pz9RPzUl1Sb0rCP8iZCeis4YbQ5tuUppOfnO/X0Mosv
SOQJ/bF9juKW8ocnQvNjsNxGV1gPkWWtiU2Old7Qm7FLDqL6kQKrq356yifs0NiMVGdvAg32
eugewuttCugoZASYOpQdwPu1jMxVO1fzF3zEy5w6tDlcfA2DZwa+un9/k8XZWAO/KVExy68q
UtVRQxsIOKgpl/2tNw5DBAKbykKIkmizbsA2xtzqnYqld4kOdNMJh3YjlqWF9Bt8MZo7a+Q6
jgayr2rjpyIptc599DGtvp68ZNQ64TKNmiMnnyGMo3E+xW34G3RrsYnHGm+xJoLKoOJhacDu
oZke1ycJgQv+Y61WPrvtFOVBxV5rvSzO0+8px5AWN3uCrrw1RmT5N14IVhh6BOtRjsifqIB2
dAKxzBNsvbXm1SzkuyqYiMnp5ivy3m2mPwc9GLsykx0FRIkhCYO8ins9E5ot9QvVnE155MFA
8FVwsP5uNdOF4EzQS2/h2QK3zb5Yq4Nftlo605Dd5vuVN/A7CUN38DaAKBxDKgqDzydfQnZw
R0hTfMHNLgBJKNDSpz2P6almGlUJtXT6IYmzuU2Iaion8ePG

我已经尝试了以下三个库:

>内置的.NET GzipStream
> DotNetZip,包括,

> GzipStream
> DeflateStream

> 7-zip的LZMA SDK

我遇到了压缩实际上使字符串更长的问题.我的理解是DeflateStream的开销最小,但它仍在添加字符.使用DotNetZip,我告诉它使用最大压缩:

Imports Ionic.Zlib

Shared Function CompressData(data As Byte()) As Array

    Dim msCompressed As MemoryStream = New MemoryStream

    ' I'm not sure if the last parameter on this next function should be
    ' true (for LeaveOpen),but it doesn't seem to affect it either way.
    Dim deflated As DeflateStream = New DeflateStream(msCompressed,_
        CompressionMode.Compress,CompressionLevel.BestCompression,True)

    ' Write data to compression stream (which is linked to the memorystream)
    deflated.Write(data,data.Length)
    deflated.Flush()
    deflated.Close()

    Return msCompressed.ToArray
End Function

我只是认为这会变得更糟,因为我会有更多的数据.对于这个长度的字符串,是否有更好的压缩算法?压缩通常只适用于较长的字符串吗?不幸的是,数据是这样的,我不能使用替代字符来处理数据.

此外,我能够使用字母数字编码的QR码,还是我必须使用二进制?我不认为我可以,每http://www.qrme.co.uk/qr-code-forum.html?func=view&catid=3&id=324,但我想确定.

谢谢你的帮助!

乍一看,您似乎正在尝试获取一些数据并使用此过程将其转换为QR代码:

– >加密 – > base64编码 – >压缩 – >制作二维码.

我建议改用这个过程:

– >压缩 – >加密 – >制作二维码.

当你想要加密和压缩时,几乎每个人都建议压缩然后加密.
(因为加密与压缩数据一样,与未压缩数据一样.
但压缩通常会使明文更短,加密文件更长.
有关详细信息,请参阅:
“Can I compress an encrypted file?”
“Compress and then encrypt,or vice-versa?”
“Composing Compression and Encryption”
“Compress,then encrypt tapes”
“Is it better to encrypt a message and then compress it or the other way around? Which provides more security?”
“Compressing and Encrypting files on Windows”
“Encryption and Compression”
“Do encrypted compression containers like zip and 7z compress or encrypt first?”
“When compressing and encrypting,should I compress first,or encrypt first?”,
等等.)

“我能够使用字母数字编码进行QR码,还是必须使用二进制?”

大多数加密算法都会产生二进制输出,因此将其直接转换为二进制编码的QR码最为简单.
我想你可以以某种方式将加密数据转换成QR字母数字编码可以处理的东西,但为什么呢?

“有没有更好的压缩算法”

对于加密数据,不可以.无论您使用何种算法,都可以(几乎可以肯定)压缩加密良好的数据.

如果按照建议进行压缩然后加密,那么各种压缩算法的有效性取决于特定类型的输入数据,而不取决于压缩后对其执行的操作.

您的输入数据是什么类型的数据?

假设您的输入数据缺少ASCII文本,
也许你可以使用其中提到的压缩算法之一
“Really simple short string compression”
“Best compression algorithm for short text strings”
“Compression of ASCII strings in C”
“Twitter text compression challenge”.

另一方面,如果您的输入数据是某种照片,
也许您可以使用“Twitter image encoding challenge”中提到的众多压缩算法之一.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读