【问题标题】:How to speed up reading of a large OBJ (text) file?如何加快读取大型 OBJ(文本)文件?
【发布时间】:2015-02-20 12:26:50
【问题描述】:

我正在使用我在网上找到的 OBJ 加载器库,我想研究一下加快它的速度。

它通过逐行读取 .OBJ 文件来工作(它基本上是一个带有数字行的文本文件)

我有一个 12mb 的 OBJ 文件,相当于大约 400,000 行。可以说,尝试逐行阅读需要很长时间。

有没有办法加快速度?它使用 BufferedReader 读取文件(存储在我的资产文件夹中)

这里是图书馆的链接:click me

【问题讨论】:

  • BufferedReader 实际上是一种好方法,例如 Files.readAllLines (Java 7) 也使用它。我认为时间在其他地方丢失了,比如没有有效的缓冲。您是否尝试过分析时间都花在了哪里?
  • 基本上不使用 OBJ 文件,使用您自己的格式,可以准备“按原样”加载到内存中(作为顶点/索引)
  • 补充一点,我还在使用一个测试 OBJ 文件,它要小得多,只有 10,000 行。这需要大约 20 秒的时间来加载,这太糟糕了 :( 我会觉得它会快得多!
  • @Selvin 我将如何去做这样的事情? (我只是把这个放在一起)
  • 事实证明,在调试模式下,仅加载 10,000 行就非常慢。如果没有调试,则需要 3 秒。还不错。我尝试使用 400,000 行文件,但由于代码在向量中使用短数字而出现错误。我试图将它们全部更改为 Long,但在 TDModelPart 类中出现错误。

标签: java android bufferedreader wavefront


【解决方案1】:

只是一个想法:在获取文件后,您可以先使用 File 类获取文件的大小:

File file = new File(sdcard,"sample.txt");
long size = file.length();

返回的大小以字节为单位,因此,将文件大小分成相当数量的块,例如5、10、20 等为每个块指定并保存一个字节范围。创建与上面创建的每个块大小相同的字节数组,然后将每个块“分配”给一个单独的工作线程,该线程应该使用 read(buffer, offset, length) 方法将其块读入其相应的字符数组,即读取“长度" 从数组索引 "offset" 开始将每个块的字符放入数组 "buffer" 中。您必须将字节转换为字符。然后将所有数组连接在一起以获得最终的完整文件内容。插入检查块大小,以便每个线程不与其他边界重叠。同样,这只是一个想法,希望它在实际实施时会起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多