gpt4 book ai didi

java - 支持 Long 以外的 RandomAccessFile?

转载 作者:太空狗 更新时间:2023-10-29 22:39:54 24 4
gpt4 key购买 nike

我目前正在使用 RandomAccessFile 的实例来管理一些内存中的数据,但是我的 RandomAccessFile 实例的大小超过了 2^64 字节,所以我不能使用 seek()write() 等方法,因为它们使用 Long 并且无法管理大于 2^64 的地址空间。那我该怎么办?我可以使用其他支持超过 2^64 的地址空间的东西吗?

编辑:问这个问题的原因:

我有一个树数据结构,理论上最多可以有 2^128 个节点,我想将这棵树存储到一个文件中。每个节点都有大约 6 个字节的数据。所以我想知道如何将这棵树存储到文件中。

最佳答案

不是正确答案,但您确定您的文件实际上有这么大吗?

来自 Long.MAX_VALUE 的文档:

A constant holding the maximum value a long can have, 2^63-1.

来自 RandomAccessFile.length() 的文档:

the length of this file, measured in bytes.

你知道2^63-1是多少字节吗?相反,9,223,372,036,854,775,807 字节?

9,223,372,036,854,775,807 B
9,223,372,036,854,775 KB
9,223,372,036,854 MB
9,223,372,036 GB
9,223,372 TB
9,223 PB
9 EB

如果我的计算正确,您将需要大约 272GB/s 的恒定写入速度 1 年

虽然这是一个很好的问题,但我希望看到答案,但我非常怀疑你有一个大小为 9EB 的文件,如果操作系统支持的话。

编辑

这里有一些 File System Limits ,令我惊讶的是,NTFS 实际上支持最大 16EiB 的单个文件,但这只是支持它的列表中的少数文件之一。


如果您绝对需要访问大于 9EiB 的文件,看起来您可能需要使用 BigInteger 推出您自己的 RandomAccessFile 版本。另一个使用 long 的地方。这可以让你达到 (2 ^ 32) ^ Integer.MAX_VALUE字节。

关于java - 支持 Long 以外的 RandomAccessFile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45470750/

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