5

Javaバイトコード命令のリストを調べていたところ、I/O命令がないことに気づきました。それは私に興味をそそられました。System.out.printlnJVMは、 I / O命令をサポートしていない場合のように、どのようにメソッドを実行しますか?

何らかの形式のメモリマップドI/Oを使用する場合、ファイル記述子などを読み取るためにOSとどのように通信しますか?JVMは、I / O操作を処理するための独自の抽象化レイヤーを実装していますか?代わりに、Java I / Oパッケージ(java.ioおよびjava.nio)がC / C ++で実装されていますか?

4

1 に答える 1

7

ライブラリのソース コードを見ると、低レベル API (OS など) とのすべてのインターフェイスがネイティブ コードを使用して行われていることがわかります。

たとえば、次のようにしますFileOutputStream

/**
 * Opens a file, with the specified name, for writing.
 * @param name name of file to be opened
 */
private native void open(String name) throws FileNotFoundException;

/**
 * Writes the specified byte to this file output stream. Implements
 * the <code>write</code> method of <code>OutputStream</code>.
 *
 * @param      b   the byte to be written.
 * @exception  IOException  if an I/O error occurs.
 */
public native void write(int b) throws IOException;

/**
 * Writes a sub array as a sequence of bytes.
 * @param b the data to be written
 * @param off the start offset in the data
 * @param len the number of bytes that are written
 * @exception IOException If an I/O error has occurred.
 */
private native void writeBytes(byte b[], int off, int len) throws IOException;

そして、対応する C ファイル (多くの場合 OS 固有) があります。

于 2012-12-13T16:53:10.790 に答える