亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

數據壓縮算法:壓縮字符串

數據壓縮算法:壓縮字符串

拉風的咖菲貓 2023-02-23 17:44:20
所以,我基本上是在開發一個桌面應用程序,你可以在其中提供一個文件,它會壓縮它并以壓縮字符串格式返回給你。我的意思是我讀取文件的字節,壓縮這些字節,然后基本上將它們轉換成原始 .txt 文件。轉換過程很簡單,我想知道的是如何壓縮文件。我知道我想進行無損數據壓縮,因為這就是我解壓縮文件的方式,但我只是不知道要使用哪種壓縮算法,或者我是否需要自己編寫一些程序。例如:public String CompressFile(Bytes fileInformation[]) {   for(int i = 0; i < fileInformation; i++) {      if(fileInformation[i].equals(fileInformation[i + 1]) {        // Say that the file has two instances of the same byte than no need to         // include it twice or thrice.      }   }}上面是一個非?;镜睦?。但我想要更復雜的東西,可以壓縮文件,直到剩下的是真正的熵或隨機性。不再壓縮,這是盡可能隨機的。從這些數據中,我可以解壓縮文件并在用戶向我提供壓縮數據時將其呈現給用戶。簡而言之,我想使用一種高效、快速、有效且功能強大的壓縮算法。提前致謝。編輯: 為了更好地表達這一點,我需要壓縮或縮小文件包含的字符串或字節序列,而不是文件本身。這道題的重點是我想壓縮一個int數組。就像我有一個數組 {1, 4, 5, 1, 4} 那么我想將一個和四個組合在一起。它不是那么有用,但是隨著數組的擴大,壓縮算法可以幫助大大減少數組的長度。
查看完整描述

1 回答

?
米琪卡哇伊

TA貢獻1998條經驗 獲得超6個贊

據我現在的理解,這個問題是無關緊要的。我想要的是一種壓縮數據的方法,因為我的內存無法處理它。但現在我意識到,我應該做的不是那樣,而是分塊讀取文件,所以壓縮與否并不重要。這是怎么做的:


try {

? ? File file = new File("myFile");

? ? FileInputStream is = new FileInputStream(file);

? ? byte[] chunk = new byte[1024];

? ? int chunkLen = 0;

? ? while ((chunkLen = is.read(chunk)) != -1) {

? ? ? ? // your code..

? ? }

} catch (FileNotFoundException fnfE) {

? ? // file not found, handle case

} catch (IOException ioE) {

? ? // problem reading, handle case

}

至于壓縮函數,如果有人想要的話,可以使用由tonyking97編寫的這個很棒的LZW 壓縮算法,基本上你必須將字節數組轉換為字符串,然后通過這個壓縮函數傳遞它。它可以工作,但是對于大字節數組來說速度很慢。

當然,為了再次寫入文件,我們必須使用而FileOutputStream不是FileInputStream并說outputStream.write(byte[], int, int).?希望這會對某人有所幫助:)


查看完整回答
反對 回復 2023-02-23
  • 1 回答
  • 0 關注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號