【问题标题】:Stream Closed Error Java流关闭错误 Java
【发布时间】:2016-03-03 07:57:45
【问题描述】:

我收到流关闭错误。我正在尝试将哈夫曼树写入文本文件,但每次运行它时,都会弹出错误提示流已关闭。有什么想法吗?

    HuffmanTree Tree = new HuffmanTree();
    HuffmanTree.HuffData[] freqTable = null;
    BufferedReader in = null;
    ObjectOutputStream out = null;
    try{
    in = new BufferedReader(new FileReader("oddysy.txt"));

    freqTable = HuffmanTree.buildFreqTable(in);
    Tree.buildTree(freqTable);
    Tree.buildCodeTable();
    Tree.printCode(new PrintStream(new FileOutputStream("freqTable.txt")));

    Tree.encode(in, new ObjectOutputStream(new FileOutputStream("watsonStructure.txt")));
    } finally {
        if (in != null){
            in.close();
        }
        if (out != null){
            out.close();
        }
    }
}
java.io.IOException: Stream closed
at java.io.BufferedReader.ensureOpen(BufferedReader.java:122)
at java.io.BufferedReader.read(BufferedReader.java:179)
at HuffmanTree.encode(HuffmanTree.java:244)
at Huffman_Driver.main(Huffman_Driver.java:28)

【问题讨论】:

    标签: java file-io inputstream huffman-code


    【解决方案1】:

    这里的问题是您使用的阅读器已经完成阅读。

    在以下代码中,HuffmanTree 使用缓冲阅读器构建频率表。

    in = new BufferedReader(new FileReader("oddysy.txt"));
    freqTable = HuffmanTree.buildFreqTable(in);
    

    现在 BufferedReader 从文件中读取所有数据并关闭流,因为没有数据要读取。

    您再次尝试使用相同的 BufferedReader,读取器从文件中读取所有数据并关闭流。因此,您会遇到此异常。

    Tree.encode(in, new ObjectOutputStream(new FileOutputStream("watsonStructure.txt")));
    

    如果您需要从同一个文件中读取数据,您必须再次初始化 BufferedReader。

    【讨论】:

    • 对不起,还是有点糊涂。所以我应该关闭流,然后重新初始化 BufferedReader? @Erranda
    • 使用 BufferedReader 完成阅读后,您将无法重复使用它。如果您需要再次从该文件中读取,只需初始化一个不同的 BufferedReader。但请确保在某些时候关闭阅读器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    相关资源
    最近更新 更多