使用 Reader 和 Writer 的压缩算法

发布时间:2021-03-08 15:46

上周我得到了一个简单的压缩算法,并要求我制作一个压缩器类,可以使用该算法压缩和解压缩字符串。

压缩算法将重复的字符压缩成一个字符和一个描述重复次数的十六进制数字。如果重复超过 15 次,例如17 次 A,结果如下:AfA2 .

这是我的代码:

import java.lang.StringBuilder;
import java.io.*;

public class Compressor {
    public static String compress(String inputUncompressed){
        StringBuilder result = new StringBuilder(1024);
        int indexStart = 0;
        int indexEnd = 0;
        char compare = 'a';
        while(indexStart < inputUncompressed.length()){
            compare = inputUncompressed.charAt(indexStart);
            while(inputUncompressed.charAt(indexEnd) == compare){
                indexEnd++;
                if(indexEnd >= inputUncompressed.length() || indexEnd - indexStart > 14){
                    break;
                }
            }
            result.append(compare);
            result.append(Integer.toHexString(indexEnd - indexStart));
            indexStart = indexEnd;
        }
        return result.toString();
    }
    public static String uncompress(String inputCompressed){
        StringBuilder result = new StringBuilder(1024);
        int charindex = 0;
        int count = 0;
        while(charindex < inputCompressed.length()){
            count = Character.digit(inputCompressed.charAt(charindex+1),16);
            for(int i=1; i<=count;i++){
                result.append(inputCompressed.charAt(charindex));
            }
            charindex+=2;
        }
        return result.toString();
    }

}

它工作正常,但今天我被要求重写它,以便 compress 函数调用 public static Writer compressStream(Reader reader)。我花了至少 3 个小时通读 Java 文档,在谷歌上搜索 Reader 和 Writer 示例并尝试使其工作,但我不知道如何做。

附言我需要尽快得到答复。

回答1