相关疑难解决方法(0)

如何缓存InputStream以供多种用途

我有一个文件的InputStream,我使用apache poi组件来读取它像这样:

POIFSFileSystem fileSystem = new POIFSFileSystem(inputStream);
Run Code Online (Sandbox Code Playgroud)

问题是我需要多次使用相同的流,POIFSFileSystem在使用后关闭流.

从输入流缓存数据然后将更多输入流提供给不同的POIFSFileSystem的最佳方法是什么?

编辑1:

通过缓存我的意思是存储供以后使用,而不是作为加速应用程序的方法.最好是将输入流读入数组或字符串,然后为每次使用创建输入流?

编辑2:

很抱歉重新打开这个问题,但在桌面和Web应用程序中工作时条件有所不同.首先,我从tomcat web app中的org.apache.commons.fileupload.FileItem获取的InputStream不支持标记,因此无法重置.

其次,我希望能够将文件保存在内存中,以便在处理文件时更快地访问和减少io问题.

java caching inputstream apache-poi

25
推荐指数
3
解决办法
4万
查看次数

无论markSupported()如何,都要使InputStream读取多次

我需要能够重复使用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 …
Run Code Online (Sandbox Code Playgroud)

java io inputstream

10
推荐指数
1
解决办法
3万
查看次数

标签 统计

inputstream ×2

java ×2

apache-poi ×1

caching ×1

io ×1