我想将1.5 GB的文件读入数组。 Now, as it takes long time,我想将其切换为其他选项。任何人都可以帮助我,
如果我将字节文件预处理到某个数据库(或者可能是其他方式),我可以加快速度吗?
任何人都可以帮助我,还有其他任何方法可以让它更快。
实际上,我必须处理超过50,1.5GB的文件。所以,such operation对我来说非常昂贵。
答案 0 :(得分:1)
您的磁盘子系统有多快?
如果您可以读取每秒40 MB,则读取1500 MB大约需要40秒。如果你想要比这更快,你需要一个更快的磁盘子系统。如果您正在阅读本地驱动器并花费几分钟时间,那么您就会遇到调整问题,并且您可以使用Java来解决此问题,因为这不是问题所在。
您可以使用内存映射文件,但如果您不需要所有数据,这只会加快访问速度。如果您需要它,您将受到硬件速度的限制。
答案 1 :(得分:1)
这取决于你想做什么。
如果你只想访问几个随机字节,那么读入数组并不好 - MappedByteBuffer会更好。
如果您想要读取所有数据并按顺序一次处理它,那么您可以将其流式传输。
如果你需要进行随机访问整个数据集的计算,特别是如果你需要重复读取元素,那么加载到数组中可能是明智的(但是ByteBuffer仍然是候选者)。
您能展示一些示例代码或进一步解释吗?
答案 2 :(得分:0)
使用BufferedInputStream或InputStream可能会尽可能快(比RandomAccessFile更快)。最大的int大小是2,147,483,647,所以你的数组有点接近1,610,612,736,这也是数组的最大大小。
我建议您只使用BufferedInputStream访问该文件以获得最佳速度,skip()和read()以获取所需数据。也许有一个实现这些的类,知道它的位置,并在你发送一个偏移量来读取时为你寻找。我相信你关闭并重新打开输入流,将其重新开始。
并且......你可能不想将它们保存在一个数组中,只需要从文件中访问它们。如果加载时间是你的杀手,这可能会有所帮助。