如何使用fileInputStream从文件内容创建频率表

时间:2018-02-16 20:33:05

标签: java fileinputstream huffman-code

我的任务是创建一个使用Huffman算法进行压缩的程序。我的程序必须能够压缩任何类型的文件。因此,为什么我没有使用与字符一起使用的Reader。 我不明白如何在编码二进制文件时制作某种频率表?

EDIT !!问题解决了。

public static void main(String args[]){

    try{
        FileInputStream in = new FileInputStream("./src/hello.jpg");

        int currentByte;
        while((currentByte = in.read())!=-1){ //in.read() 

            //read all byte streams in file and create a frequency 
            //table
        }


    }catch (IOException e){
        e.printStackTrace();
    }
}

2 个答案:

答案 0 :(得分:1)

我不确定你的意思是“从图像中读取并查看角色”但是谈论文本文件(正如你在代码示例中读到的那样)这是大多数时候通过投射工作通过执行

将读取的字节写入char
char charVal = (char) currentByte;

它主要工作,因为大多数数据是ASCII,大多数字符集包含ASCII。使用非ASCII字符会变得更复杂,因为简单的强制转换与使用charset ISO-8859-1等效。这仍将在大多数情况下产生正确的结果,例如, Window的cp1252(在德国系统上)仅与欧洲标志的ISO-8859-1不同。

事情开始严重破坏像UTF-8这样的字符集,其中非ASCII字符用多个字节编码,所以你会看到像¤而不是ä的东西。对于使用Unicode编码的文件也是如此,其中每隔一个字节很可能是二进制零。

答案 1 :(得分:-2)

您可以使用Files.readAllBytes然后遍历此数组。

 Path path = Paths.get("hello.txt");
 try {
   byte[] array = Files.readAllBytes(path);


} catch (IOException ) {
}