由于 ByteArrayInputStream
限制为 2GB,是否有任何替代解决方案允许我将 2.3GB(可能更大)文件的全部内容存储到 InputStream
由 Stax2 读取?
当前代码:
XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(in); //ByteArrayInputStream????
try
{
SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
Schema schema = factory.newSchema(new StreamSource(schemaInputStream));
Validator validator = schema.newValidator();
validator.validate(new StAXSource(xmlStreamReader));
}
finally
{
xmlStreamReader.close();
}
对于性能调整,变量 in
不得来自磁盘。我有足够的内存。
最佳答案
StAX2 的全部要点是您不需要将文件读入内存。您可以只提供源,让 StAX StreamReader 根据需要提取数据。
您还有哪些未在问题中显示的其他限制条件?
如果你有很多内存,并且你想获得良好的性能,只需用一个大字节缓冲区包装你的 InputStream,让缓冲区为你做缓冲:
// 4 meg buffer on the stream
InputStream buffered = new BufferedInputStream(schemaInputStream, 1024 * 1024 * 4);
在 Java 中解决这个问题的另一种方法是创建一个 RAMDisk,并将文件存储在上面,这将消除 Java 中的问题,Java 的基本限制是您只能拥有小于 Integer 的值。单个数组中的 MAX_VALUE
个值。
关于java - 在Java中将大于2GB的文件读入内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26140002/