2015-11-29 3 views
0

Я получаю сообщение об ошибке Stream Closed. Я пытаюсь написать дерево huffman в текстовый файл, но каждый раз, когда я его запускаю, появляется всплывающее сообщение о том, что поток закрыт. Есть идеи?Ошибка потока с потоком Java

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) 

ответ

0

Здесь проблема в том, что вы используете читатель, который уже сделан с чтением.

В следующем коде HuffmanTree формирует частотную таблицу с буферизованным считывателем.

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

Теперь BufferedReader считывает все данные из файла и закрывает поток, поскольку нет данных для чтения.

Снова вы пытаетесь использовать тот же BufferedReader, где читатель считывает все данные из файла и закрывает поток. Следовательно, вы получаете это исключение.

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

Если вам нужно прочитать данные из того же файла, снова вам нужно инициализировать BufferedReader.

+0

Извините, но все еще немного смущенный. Итак, я должен закрыть поток, а затем повторно инициализировать BufferedReader? @Erranda – waterboy21

+0

После того, как вы закончили чтение с помощью BufferedReader, вы не сможете его повторно использовать. Если вам нужно снова прочитать из этого файла, просто инициализируйте другой BufferedReader. Но убедитесь, что вы закрываете читателей в какой-то момент. – Eranda

Смежные вопросы