2015-06-27 236 views
-1

我有一個有限的存儲空間,只能在字節數組中存儲16個字節。如果我有一個很長的字符串,String.getBytes()將不適用於我。將Java字符串轉換爲16字節的字節數組

你會怎麼做轉換/編碼集內的16個字節的字節數組7位的標準ASCII字符長Java字符串,可編碼回到原來的字符串?不過,我明白原始輸入字符串會有限制。我還在尋找建議,以便如何用合理的長度限制(即電子郵件地址長度)來設置要求。

+0

字符串是否具有任意值,或者只有有限數量的值可以擁有?這些字符串中會有多少?存儲器是否僅限於RAM,或者是否可以將字符串存儲在解除16字節限制的地方? – yshavit

+0

該限制實際上是由外部庫設置的,它限制以16固定數組大小的字節數組。我的輸入字符串實際上是7位ascii可打印字符集中的電子郵件地址。我無法將電子郵件地址限制在16個字符以內,但我想知道一個合理的方法來擴展到合理的電子郵件長度。 – Sean

+1

如果是電子郵件地址,則可以輕鬆創建自定義編碼,將所有小寫字母和大多數標點符號映射爲5位字符,然後將其擴展爲添加對數字的支持。這樣,您可以在16個字節中容納最多25個字符。不確定這對你來說已經足夠了。對我而言,事實並非如此。您還可以使用上下文霍夫曼編碼對編碼地址進行一些實驗。不過,我懷疑結果會很好。 –

回答

2

你問的是不可能的。一個任意的,足夠長且複雜的字符串不能用16個字節編碼。

即使串只使用7位標準的ASCII字符,則將限於編碼/解碼字符串與18個字符((每字節8位×16個字節),每個字符/ 7位)。在這種情況下,實際的位移算法會非常混亂,並且所產生的內存節省將可以忽略不計。

+0

我的糟糕的問題開始。顯然,如果沒有對輸入字符串的合理限制,這是技術上不可能的。讓我重新修復我的問題。謝謝。 – Sean

相關問題