6

在 Java 中,您可以读取和写入文件。但是 JVM 可以在许多系统上运行,这些系统可能具有不同的存储文件和相关数据的方式。如何编写适用于每个系统的 JVM 代码?

本机方法在什么级别使用?JVM 是否有一组特定的文件函数必须为每个系统实现,然后可以被任何语言调用?还是在 JVM 上运行的每种语言(如 Java 或 Scala)都必须自己完成?

4

3 回答 3

6

通常,您会使用 C++ 等高级语言编写 JVM,然后使用该语言提供的库与文件系统进行交互。然后,您可以在不同的平台、操作系统和体系结构上编译 JVM,并将确定如何执行文件 I/O 的责任留给高级语言编译器。

或者,对于某些操作,JVM 可能根据其运行的操作系统具有不同的文件 I/O 或窗口实现。然后会有多个不同的实现,当在系统上构建 JVM 时,编译器可以根据config脚本或#ifdefs 等确定使用哪一个。

希望这可以帮助!

于 2013-06-12T00:50:50.733 回答
1

大多数 IO 函数都是非常标准的,并且有跨多个操作系统工作的 POSIX 调用。如果存在差异,可以使用 C 预处理器包含或不包含相关代码#ifndef#ifndef

于 2013-06-12T01:01:55.757 回答
1

读取和写入文件是在 java.io.FileInputStream / FileOutputStream 类中通过调用本机方法完成的,例如

private native int readBytes(byte b[], int off, int len) throws IOException;

private native void writeBytes(byte b[], int off, int len, boolean append)
        throws IOException;

这些类对于所有平台都是相同的,只是本机方法实现不同,在我的 Oracle HotSpot 中它是jre/bin/java.dll

于 2013-06-12T04:09:06.907 回答