gpt4 book ai didi

java - 分配大文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:01:43 27 4
gpt4 key购买 nike

我需要分配大小接近 50 GB 的文件,但是这段代码:

RandomAccessFile out = new RandomAccessFile("C:\\hello.txt", "rw");
out.setLength(50 * 1024 * 1024 * 1024); // 50 giga-bytes

抛出异常:

Exception in thread "main" java.io.IOException: Попытка поместить указатель на файл перед началом файла
at java.io.RandomAccessFile.setLength(Native Method)
at Experiment.main(Experiment.java:8)

: 试图将文件指针移动到文件开头之前。

当我尝试分配 50 兆字节时,不会抛出此类异常。磁盘可用空间远远大于所需文件大小。

最佳答案

您需要使用 L 后缀将大小定义为 long:

out.setLength(50L * 1024L * 1024L * 1024L);

问题是默认情况下,数值字面量是int类型,50G超出了它的范围,所以乘法结果溢出。传递给 setLength() 的实际值为 -2147483648

更详细地说,乘法(以及其他数字运算)的结果类型由其最通用的操作数定义,因此您实际上不需要将 L 后缀添加到他们中的每一个。仅将其添加到它们中就足够了(第一个是明智的选择):

long wrong = 50 * 1024 * 1024 * 1024; // -2147483648
long right = 50L * 1024 * 1024 * 1024; // 53687091200

关于java - 分配大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27570052/

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