gpt4 book ai didi

java - 在Java中将大于2GB的文件读入内存

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:25:18 24 4
gpt4 key购买 nike

由于 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com