我是一名计算机科学专业的学生 - 二年级。我被要求准备一个项目 - 由霍夫曼代码。 在项目期间,我陷入了故障,我正在构建编码器的项目阶段。我得到一个文件 - 我必须根据霍夫曼代码以字节编码它。
我的问题是如何以字节为单位对文件进行编码 - 我做了什么:例如: 我在文件中收到了"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();
}
}
- 使用
String.getBytes()
将字节写入文件。 - 使用试用资源,不必担心关闭资源。使用
;
分隔多个资源。 - 不要循环编写。首先生成字符串,然后写入一次。I/O 速度很慢。
- 在循环中连接时,请使用
StringBuilder
避免创建新字符串。 - 我让你的代码更简洁一点,你可以随心所欲地重写。