Получение InputStream для чтения более одного раза, независимо от markSupported ()

Мне нужно иметь возможность повторно использовать java.io.InputStream несколько раз, и я понял следующее код будет работать, но он работает только в первый раз.

Код


public class Clazz
{
  private java.io.InputStream dbInputStream, firstDBInputStream;
  private ArrayTable db;

  public Clazz(java.io.InputStream defDB)
  {
    this.firstDBInputStream = defDB;
    this.dbInputStream = defDB;
    if (db == null)
      throw new java.io.FileNotFoundException("Could not find the database at " + db);
    if (dbInputStream.markSupported())
      dbInputStream.mark(Integer.MAX_VALUE);
    loadDatabaseToArrayTable();
  }

  public final void loadDatabaseToArrayTable() throws java.io.IOException
  {
    this.dbInputStream = firstDBInputStream;
    if (dbInputStream.markSupported())
      dbInputStream.reset();

    java.util.Scanner fileScanner = new java.util.Scanner(dbInputStream);
    String CSV = "";
    for (int i = 0; fileScanner.hasNextLine(); i++)
      CSV += fileScanner.nextLine() + "\n";
    db = ArrayTable.createArrayTableFromCSV(CSV);
  }

  public void reloadDatabase()//A method called by the UI
  {
    try
    {
      loadDatabaseToArrayTable();
    }
    catch (Throwable t)
    {
      //Alert the user that an error has occurred
    }
  }
}

Обратите внимание, что ArrayTable - это мой класс, который использует массивы для предоставления интерфейса для работы с таблицами.

Вопрос


В этой программе база данных отображается непосредственно пользователю сразу после вызова метода reloadDatabase () , поэтому любое решение, включающее сохранение начального чтения в объект в памяти, является бесполезно, так как это НЕ будет обновлять данные (подумайте об этом как о браузере; когда вы нажимаете «Обновить», вы хотите, чтобы он снова получил информацию, а не просто отображал информацию, полученную в первый раз). Как я могу прочитать java.io.InputStream более одного раза?

10
задан Supuhstar 12 October 2011 в 02:30
поделиться