在 Java 中,您可以读取和写入文件。但是 JVM 可以在许多系统上运行,这些系统可能具有不同的存储文件和相关数据的方式。如何编写适用于每个系统的 JVM 代码?
本机方法在什么级别使用?JVM 是否有一组特定的文件函数必须为每个系统实现,然后可以被任何语言调用?还是在 JVM 上运行的每种语言(如 Java 或 Scala)都必须自己完成?
通常,您会使用 C++ 等高级语言编写 JVM,然后使用该语言提供的库与文件系统进行交互。然后,您可以在不同的平台、操作系统和体系结构上编译 JVM,并将确定如何执行文件 I/O 的责任留给高级语言编译器。
或者,对于某些操作,JVM 可能根据其运行的操作系统具有不同的文件 I/O 或窗口实现。然后会有多个不同的实现,当在系统上构建 JVM 时,编译器可以根据config
脚本或#ifdef
s 等确定使用哪一个。
希望这可以帮助!
大多数 IO 函数都是非常标准的,并且有跨多个操作系统工作的 POSIX 调用。如果存在差异,可以使用 C 预处理器包含或不包含相关代码#ifndef
和#ifndef
读取和写入文件是在 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
库