繁体   English   中英

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

[英]huffman code encoder - Write to output file

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

我的问题是如何以字节为单位对文件进行编码——我做了什么:例如:我在文件中收到了“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. 使用 try-with-resources,不用担心关闭资源。 使用; 分离多个资源。
  3. 不要循环写。 首先构建字符串,然后编写一次。 I/O 很慢。
  4. 在循环中连接时,使用StringBuilder避免创建新字符串。
  5. 我让你的代码更简洁一些,你可以随意重写。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM