gpt4 book ai didi

java - 使用 RandomAccessFile 的最佳方法是 Java

转载 作者:行者123 更新时间:2023-12-02 01:56:37 25 4
gpt4 key购买 nike

我正在创建一个实用程序,它使用 RandomAccessFile 将 MSSQL 表 blob 写入数据磁盘文件。它太慢了,因为我们需要始终寻找最后一个位置并写入流内容。请让我知道加速随机访问文件写入的任何其他替代方案。

我有超过 50M 的记录,按照目前的逻辑,大约需要 10 个小时。

我的代码块是这样的:

RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
InputStream inputStream = null;

while (rows.hasNext()) {
Row row = rows.next();
inputStream = (InputStream) row.getValues()[0];
offset = randomAccessFile.length();
byte[] buffer = new byte[8196];
int count;
randomAccessFile.seek(offset);
randomAccessFile.setLength(offset);
while ((count = inputStream.read(buffer)) != -1) {
randomAccessFile.write(buffer, 0, count);
}
}
randomAccessFile.close();

最佳答案

根据您发布的代码,您只需附加到现有文件即可。在追加模式下使用缓冲写入器可以更轻松、更高效地完成此操作。

因此,使用

BufferedWriter writer = Files.newBufferedWriter(file.toPath(), StandardOpenOptions.CREATE, StandardOpenOptions.APPEND);

相反。

Peter 评论后更新:对于输出流,整个事情基本上是相同的,只是 Files 对于“缓冲”部分没有一个很好的便利功能。因此:

OutputStream outputStream = new BufferedOutputStream(Files.newOutputStream(file.toPath(), StandardOpenOption.CREATE, StandardOpenOption.APPEND));

关于java - 使用 RandomAccessFile 的最佳方法是 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52196866/

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