霍夫曼代码编码器 - 写入输出文件



我是一名计算机科学专业的学生 - 二年级。我被要求准备一个项目 - 由霍夫曼代码。 在项目期间,我陷入了故障,我正在构建编码器的项目阶段。我得到一个文件 - 我必须根据霍夫曼代码以字节编码它。

我的问题是如何以字节为单位对文件进行编码 - 我做了什么:例如: 我在文件中收到了"abca cadbara"一词。在另一个文件中,我将编码放在另一个文件中,但使用字符串而不是字节。

代码部分:

public static void writeOutputFile (String[] input_names, String[] output_names, Map<Character, String> codes)
{
FileInputStream input;
FileOutputStream output;
try
{
input = new FileInputStream(input_names[0]);
output = new FileOutputStream(output_names[0]);
for (int i = 0; i < (int) input.getChannel().size(); i++)   
{
int x = input.read();
String codeOutput = codes.get((char) x);
//output.write(Integer.parseInt(codeOutput, 2));
for (int j = 0; j < codeOutput.length(); j++) {
output.write((int) codeOutput.charAt(j));
}
}
input.close();
output.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}

如何使用字节而不是字符串? 感谢您的帮助。

public static void writeOutputFile (String[] input_names, 
String[] output_names, 
Map<Character, String> codes) {
try (FileInputStream input = new FileInputStream(input_names[0]);
FileOutputStream output = new FileOutputStream(output_names[0])) {
StringBuilder toWrite = new StringBuilder();
for (int i = 0; i < (int) input.getChannel().size(); i++) {
toWrite.append(codes.get((char) input.read()));
}
output.write(toWrite.toString().getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
  1. 使用String.getBytes()将字节写入文件。
  2. 使用试用资源,不必担心关闭资源。使用;分隔多个资源。
  3. 不要循环编写。首先生成字符串,然后写入一次。I/O 速度很慢。
  4. 在循环中连接时,请使用StringBuilder避免创建新字符串。
  5. 我让你的代码更简洁一点,你可以随心所欲地重写。

最新更新