Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JVM和Java如何实现对文件的读写?_Java_File_Jvm - Fatal编程技术网

JVM和Java如何实现对文件的读写?

JVM和Java如何实现对文件的读写?,java,file,jvm,Java,File,Jvm,在Java中,您可以读取和写入文件。但是JVM可以在许多系统上运行,这些系统可能有不同的存储文件和相关数据的方法。如何编写适用于每个系统的JVM代码 在什么级别使用本机方法?JVM是否有一组必须为每个系统实现的文件函数,这些函数可以被任何语言调用?或者,在JVM(如java或斯卡拉)上运行的每种语言都必须自己做?,通常,您将用C++语言编写JVM,然后使用该语言提供的库与文件系统接口。然后,您可以在不同的平台、操作系统和体系结构上编译JVM,并将确定如何执行文件I/O的责任留给高级语言编译器 或

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


在什么级别使用本机方法?JVM是否有一组必须为每个系统实现的文件函数,这些函数可以被任何语言调用?或者,在JVM(如java或斯卡拉)上运行的每种语言都必须自己做?

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

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


希望这有帮助

大多数IO函数都是相当标准的,并且有POSIX调用,可以跨多个操作系统工作。如果存在差异,相关代码可以包含或不使用带有
#ifndef
#ifndef
的C预处理器,在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热点中,它是
jre/bin/java.dll
library

JVM为大多数操作系统包装了操作系统本机文件函数。为JVM编写的语言不必担心它。@Slaks-这只是Java代码。在本机代码方面发生了更多的事情。当然是与读写文件有关的东西。从我之前对OpenJDK JVM代码库的短暂访问中,我得到的印象是,对于不同的操作系统,本机代码API有不同的实现。它(在很大程度上)不仅仅是通过条件编译完成的。@StephenC即使在Java中也有像WindowsFileSystem和UnixFileSystem这样的实现类,它们只在这些系统上可用。好吧,如果JVM为您包装了所有特定于操作系统的东西,那么您如何在JVM代码中调用/使用这些东西(比如,如果您正在编写一个编译器,它将为一种新语言生成JVM代码)?另外,从控制台读写也是这样工作的吗?