Мне нужно иметь возможность повторно использовать 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
более одного раза?