如何在 Java 7 中可移植地获取文件存储的块大小?

Posted

技术标签:

【中文标题】如何在 Java 7 中可移植地获取文件存储的块大小?【英文标题】:How can the block size of a file store be portably obtained in Java 7? 【发布时间】:2011-04-22 23:22:36 【问题描述】:

我查看了java.nio.file.attribute.Attributesjava.nio.file.FileStore,但找不到发现磁盘文件块大小的方法。

【问题讨论】:

块大小本质上不是不可移植的吗?如果文件存储不使用块(肯定不太可能,但可能)怎么办? @Mark 绝大多数文件存储都是通过旋转磁盘实现的,因此使用块。我可以处理块大小为一个字节的情况。我想要的是一种确定大小的便携式方法。 【参考方案1】:

这是关于缓冲区大小与 I/O 吞吐量的article。概要:nio 为您处理所有这些。 SO post 得出结论,您应该使用 2 的幂。

【讨论】:

Devon,我想要一种以编程方式确定块大小的方法,它不依赖于进行实验和解释结果。 我明白这一点。但是,Java 中没有公开字段系统首选 IO 大小的机制。鉴于此,最好的后备位置是使用可能的倍数并相信 io/nio 子系统会做正确的事情。一般来说,文件系统使用 4K、8K 或 16K 的 I/O 大小。因此,使用其中一种尺寸通常就足够了。【参考方案2】:

Java 7 没有要求的信息,用户的问题与 Java 7 有关。

但在 Java 10 中,引入了一种新方法来提供请求的信息。

FileStore 类的getBlockSize() 方法用于返回此文件存储对象中每个块的字节数。每个文件存储都组织成离散的字节序列,称为块,块是文件存储的最小存储单元。每个读写操作都在多个块上执行。该方法有助于获取Block的大小。

【讨论】:

以上是关于如何在 Java 7 中可移植地获取文件存储的块大小?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中可移植地计算 sha1 哈希?

HDFS块的存储策略

hdfs的基本命令行

如何获取.java文件的目录[重复]

Hadoop Block

在java web项目中,如何获取项目的绝对路径(考虑到后期移植不能写死),大神帮忙!