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