2013-06-12 15 views
6

In Java, è possibile leggere e scrivere sui file. Ma la JVM può girare su molti sistemi che possono avere diversi modi di archiviare file e dati correlati. Come si scrive codice JVM che funziona su ogni sistema?In che modo JVM e Java implementano la lettura e la scrittura di file?

A quale livello sono utilizzati i metodi nativi? La JVM ha un certo insieme di funzioni di file che devono essere implementate per ogni sistema e che possono quindi essere richiamate da qualsiasi lingua? O ogni linguaggio che gira su JVM (come Java o Scala) deve farlo da solo?

+1

la JVM avvolge funzioni di file nativo del sistema operativo per la maggior parte OS. Le lingue scritte per la JVM non devono preoccuparsene. – Serdalis

+0

http://www.grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7-b147/java/io/FileSystem.java#FileSystem – SLaks

+0

@Slaks: questo è solo il codice Java. Molto di più accade sul lato del codice nativo. Certamente la roba da fare con la lettura e la scrittura di file. –

risposta

6

In genere, si scrive la JVM in un linguaggio di alto livello come C++ e quindi si utilizzano le librerie fornite da quella lingua per l'interfaccia con il file system. È quindi possibile compilare la JVM su piattaforme, sistemi operativi e architetture diversi e lasciare la responsabilità di determinare come eseguire l'I/O di file per il compilatore di linguaggio di alto livello.

In alternativa, per determinate operazioni, la JVM potrebbe avere diverse implementazioni di I/O di file o finestre in base al sistema operativo su cui viene eseguito. Ci sarebbero poi molteplici implementazioni e quando compilando la JVM su un sistema il compilatore può determinare quale utilizzare in base a uno script config o #ifdef, ecc.

Spero che questo aiuti!

+0

Ok, quindi se la JVM avvolge tutte le cose specifiche del sistema operativo per te, come chiami/usi quella roba nel codice JVM (come se stessimo scrivendo un compilatore che genererebbe codice JVM per una nuova lingua)? Inoltre, è così che funziona anche la lettura e la scrittura sulla console? – Tespa42

1

La maggior parte delle funzioni di I/O è piuttosto standard e ci sono chiamate POSIX che funzionano su più sistemi operativi. Dove c'è una differenza, il codice in questione può essere incluso o meno utilizzando il pre-processore C con #ifndef e #ifndef

+1

Dalle mie precedenti visite alla base di codice JVM di OpenJDK ho avuto l'impressione che esistessero implementazioni separate delle API di codice nativo per diversi sistemi operativi. È (in misura significativa) non solo fatto con la compilazione condizionale. –

+0

@StephenC Anche in Java esistono classi di implementazione come WindowsFileSystem e UnixFileSystem che sono disponibili solo su tali sistemi. –

1

lettura e la scrittura di file è stato fatto nelle classi java.io.FileInputStream/FileOutputStream chiamando metodi nativi per esempio

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; 

Queste classi sono le stesse per tutte le piattaforme solo i nativi differes implementazione metodi, a mio Oracle HotSpot è jre/bin/java.dll biblioteca

Problemi correlati