gpt4 book ai didi

java - 从文件加载大型 2D int 数组的最快方法是什么?

转载 作者:搜寻专家 更新时间:2023-11-01 01:10:35 24 4
gpt4 key购买 nike

我正在从文件中加载一个二维数组,它有 15,000,000 * 3 个整数(最终将是 40,000,000 * 3 个整数)。现在,我使用 dataInputStream.readInt() 顺序读取整数。大约需要 15 秒。我能否使其速度显着加快(至少 3 倍),或者这已经是我所能达到的最快速度了吗?

最佳答案

是的,你可以。 来自 benchmark of 13 different ways of reading files :

如果您必须选择最快的方法,那将是以下方法之一:

  • FileChannel 带有 MappedByteBuffer 和数组读取。
  • FileChannel,带有直接 ByteBuffer 和数组读取。
  • FileChannel 具有包装数组 ByteBuffer 和直接数组访问。

为了获得最佳的 Java 读取性能,需要记住 4 件事:

  • 通过一次读取一个数组而不是一个字节来最小化 I/O 操作8 KB 的数组大小合适(这就是为什么它是 BufferedInputStream 的默认值)。
  • 通过一次获取一个数组而不是一个字节的数据来最大程度地减少方法调用一次。使用数组索引获取数组中的字节。
  • 如果不需要线程,则尽量减少线程同步锁安全。要么减少对线程安全类的方法调用,要么使用一个非线程安全类,如 FileChannelMappedByteBuffer
  • 尽量减少 JVM/OS、内部缓冲区和应用程序数组。FileChannel 与内存映射一起使用,或直接或包装数组 ByteBuffer

关于java - 从文件加载大型 2D int 数组的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17264147/

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