【问题标题】:How to get the file physical address in java [closed]如何在java中获取文件物理地址[关闭]
【发布时间】:2013-11-10 15:08:13
【问题描述】:

我正在处理大量文件,我需要知道每个文件在硬盘或闪存中的物理偏移量(地址)

谢谢亲爱的

【问题讨论】:

  • 你能至少告诉我们你尝试了什么吗?或者你做了什么?当您要求物理地址时,我无法清楚地知道您到底想要什么,您是在寻找 C:/directory/ 还是更像@as2452s 内存位置的东西 通常当您创建一个类并且不添加覆盖时toString() 方法并在该对象上使用 print 或 toString,您将获得它的内存位置
  • 网上已有数以百万计的教程。你试过什么?
  • 您是否正在实施硬盘驱动程序?在 Java 中?如果不是,您不需要文件的“物理地址”,而是文件系统上的位置,由 java.io.File 类的方法返回。
  • 处理“物理偏移/地址”文件或其块用于驱动程序级编程。为什么Java需要它来操作文件?
  • 在计算机科学中,询问您给出的答案通常会更好(参见其他 cmets)。以下是一些可能有助于作为参考的链接:stackoverflow.com/questions/6403795/…

标签: java


【解决方案1】:

文件没有一个物理偏移量。相反,它们由块组成(除非你的文件很小,在这种情况下只有一个块)如果你是 root,你可以在 Linux 上读取原始文件系统,例如/dev/sd1c,但你如何做到这一点取决于你的文件系统有。

我建议你阅读你正在使用的文件系统的维基百科页面。

但是,您很可能不知道实际位置,而您只需要虚拟位置。为此,您使用 FileInputStream/FileOutputStream/RandomAccessFile 打开文件并内存映射文件。这会将文件映射到连续的虚拟内存中,您可以像在内存中一样访问文件的内容(如果您访问整个文件,很有可能它会被缓存在内存中)

【讨论】:

  • 据我了解,您的意思是文件的物理地址保存在链表之类的结构中。那么是否可以将所有地址都放在类似结构的链表中,以便我们可以访问整个文件的地址?
  • @Mahdi 文件没有地址。您可以内存映射文件以获取一个或多个地址,在多个区域中,例如ByteBuffers 并将它们拼接在一起。我会使用 ArrayList 使随机访问更容易。或者,如果您从一开始就知道希望它有多大,则可以创建一个非常大的内存映射。
  • 感谢您的回复
【解决方案2】:

Java 无法做到这一点。问题太低级了。您需要使用系统编程语言。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 2014-11-24
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多