我的任务是创建一个使用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();
}
}
答案 0 :(得分:1)
我不确定你的意思是“从图像中读取并查看角色”但是谈论文本文件(正如你在代码示例中读到的那样)这是大多数时候通过投射工作通过执行
将读取的字节写入charchar 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 ) {
}