读取Java中的OLE2文件而不缓冲到内存中?

| 我正在使用Apache POI读取OLE2文件(可能是Word,可能是Excel)。使用POIFSFileSystem,我可以打开文件并读取内容。那一点都很好。 但是,它似乎确实在使用大量内存。查看POIFS的一些位,似乎文件的各个位被缓冲到内存中,有时不止一次。 是否可以只读取文件中的位,而无需一次全部加载?我注意到,使用新的文件格式(ooxml),您可以在File和InputStream之间进行选择,并且docs将File构造函数列出为较低的内存。较旧的OLE2 POIFS有类似的东西吗? 我正在使用POI 3.7 Final,以防万一!     
已邀请:
运气不错,可以完成,但是but,您需要升级到Beta版-代码在3.7 Final之后才发布。您应该对3.8 beta 2没问题,但是如果可以的话,您可能要等待3.8 beta 3,因为代码仍在开发中。 您需要做的是从使用POIFSFileSystem切换到NPOIFSFileSystem。 N前缀用于新的基于NIO的OLE2代码,使用流时,内存效率更高,使用文件时,内存效率更高。有关更多详细信息,请参见NPOIFSFileSystem文档。 您的代码将类似于以下内容:
// This is the most memory efficient way to open the FileSystem
NPOIFSFileSystem fs;
try {
    fs = new NPOIFSFileSystem(new File(filename));
} catch (IOException e) {
    // an I/O error occurred, or the File did not provide a compatible
    // POIFS data structure
}
DirectoryEntry root = fs.getRoot();
在3.8 beta 2中,大多数POIDocument类(HSSFWorkbook等)将在其构造函数中接受DirectoryEntry,因此您可以从NPOIFSFileSystem中读取它们。但是,写支持还没有完全结束,因此如果需要写回(内存占用更多​​),则需要坚持使用POIFSFileSytem。     

要回复问题请先登录注册