Java Native Accessとは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > 百科事典 > Java Native Accessの意味・解説 

Java Native Access

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/07/26 00:29 UTC 版)

ナビゲーションに移動 検索に移動
Java Native Access
作者 Todd Fast、Timothy Wall、Liang Chen
初版 2007年5月9日 (2007-05-09)
最新版 5.6.0 / 2020年7月14日(12日前) (2020-07-14[1][2]
リポジトリ github.com/java-native-access/jna
プログラミング言語 C, Java
対応OS Windows, macOS, Android, AIX, FreeBSD, Linux, OpenBSD, Solaris, Windows Mobile
プラットフォーム Javaプラットフォーム 1.4 以降(JNA 3.5.2 以前)、Java 1.6(JNA 4.0.0以降)
サイズ 1.83 MB(アーカイブのサイズ)
種別 ライブラリ
ライセンス LGPL 2.1 以降または(バージョン4.0以降は)Apache License 2.0
公式サイト github.com/java-native-access/jna
テンプレートを表示

Java Native Access (JNA) とは、JavaプログラムがJava Native Interfaceを用いずにネイティブの共有ライブラリにアクセスする方法を提供するライブラリである。JNA は最小限の作業でネイティブコードにアクセスできることを目指して設計されており、決まりきったアクセスコードを書いたりグルーコードの生成を行ったりせず、ネイティブコードへ正しく簡単にアクセスすることを最優先としている(ただし、性能にも注意が払われている)。JNAライブラリはネイティブコードを呼び出すためにlibffiを用いており、名前を指定してライブラリをロードするネイティブの関数を用いて、目的のライブラリ関数の関数ポインタを取得する。ネイティブコードにアクセスする過程で静的なバインディング、ヘッダファイル、またコンパイルは必要ない。アプリケーションの開発者はJavaのインターフェイスを用いて対象のネイティブライブラリの関数や構造体を記述する。これによって、JNIコードを記述しビルドする大きな労力をかけずにきわめて簡単にネイティブプラットフォームの機能を利用することができる。

JNAの採用例

型の割り当て

JNAライブラリがサポートするJavaとネイティブコードの割り当てを下表に示す[6]

ネイティブ型 サイズ Java 言語の型 Windows での一般的な型
char 8ビット整数 byte BYTE, TCHAR
short 16ビット整数 short WORD
wchar_t 16/32ビット文字 char TCHAR
int 32ビット整数 int DWORD
int 真偽値 boolean BOOL
long 32/64ビット整数 NativeLong LONG
long long 64ビット整数 long __int64
float 32ビット浮動小数点数 float
double 64ビット浮動小数点数 double
char* C 文字列 String LPCTSTR
void* ポインタ Pointer LPVOID, HANDLE, LPXXX

下記のプログラムはプラットフォームの標準Cライブラリをロードし、printf関数を呼び出す。

注: 以下のコードはWindowsLinux / UNIX / macOSプラットフォームで動作する。

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;

/** Library の宣言と使用法の簡単な例 */
public class HelloWorld {
    public interface CLibrary extends Library {
        CLibrary INSTANCE = (CLibrary) Native.loadLibrary(Platform.isWindows() ? "msvcrt" : "c", CLibrary.class);
        void printf(String format, Object... args);
    }

    public static void main(String[] args) {
        CLibrary.INSTANCE.printf("Hello, World\n");
        for (int i = 0; i < args.length; i++) {
            CLibrary.INSTANCE.printf("Argument %d: %s\n", i, args[i]);
        }
    }
}

以下の例は、 C POSIXライブラリをロードし、標準APImkdirを呼び出す。

注: 下記のコードはPOSIX環境で動作する。

import com.sun.jna.Library;
import com.sun.jna.Native;

/** POSIXライブラリの宣言と使用法の例 */
public class PosixExample {
    public interface POSIX extends Library {
        POSIX INSTANCE = (POSIX) Native.loadLibrary("c", POSIX.class);
        int chmod(String filename, int mode);
        int chown(String filename, int user, int group);
        int rename(String oldpath, String newpath);
        int kill(int pid, int signal);
        int link(String oldpath, String newpath);
        int mkdir(String path, int mode);
        int rmdir(String path);
    }

    public static void main(String[] args) {
        POSIX posix = POSIX.INSTANCE;
        posix.mkdir("/tmp/newdir", 0777);
        posix.rename("/tmp/newdir", "/tmp/renamedir");
    }
}

下記のプログラムはKernel32.dllをロードし、BeepSleep関数を呼び出す。

注: 下記のコードは Windows でのみ動作する。

import com.sun.jna.Library;
import com.sun.jna.Native;

/** MS-Windows の Library の宣言と使用法の例 */
public class BeepExample {
    public interface Kernel32 extends Library {
        Kernel32 INSTANCE = (Kernel32) Native.loadLibrary("kernel32", Kernel32.class);
        boolean Beep(int dwFreq, int dwDuration);
        void Sleep(int dwMilliseconds);
    }

    public static void main(String[] args) {
        Kernel32 kernel32 = Kernel32.INSTANCE;
        kernel32.Beep(698, 500);
        kernel32.Sleep(500);
        kernel32.Beep(698, 500);
    }
}

参考文献

  1. ^ Releases - java-native-access/jna”. GitHub (2020年7月14日). 2020年7月26日閲覧。
  2. ^ Bläsing, Matthias (2020年7月14日). “Release 5.6.0”. Groups.google.com. 2020年7月26日閲覧。
  3. ^ Java Native Access + JRuby = True POSIX
  4. ^ JNA brings native code to JRuby
  5. ^ Freedom for Media in Java
  6. ^ jna/www/Mappings.md at master · twall/jna

関連項目

外部リンク


「Java Native Access」の例文・使い方・用例・文例

Weblio日本語例文用例辞書はプログラムで機械的に例文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「Java Native Access」の関連用語

Java Native Accessのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



Java Native Accessのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのJava Native Access (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
Tanaka Corpusのコンテンツは、特に明示されている場合を除いて、次のライセンスに従います:
 Creative Commons Attribution (CC-BY) 2.0 France.
この対訳データはCreative Commons Attribution 3.0 Unportedでライセンスされています。
浜島書店 Catch a Wave
Copyright © 1995-2025 Hamajima Shoten, Publishers. All rights reserved.
株式会社ベネッセコーポレーション株式会社ベネッセコーポレーション
Copyright © Benesse Holdings, Inc. All rights reserved.
研究社研究社
Copyright (c) 1995-2025 Kenkyusha Co., Ltd. All rights reserved.
日本語WordNet日本語WordNet
日本語ワードネット1.1版 (C) 情報通信研究機構, 2009-2010 License All rights reserved.
WordNet 3.0 Copyright 2006 by Princeton University. All rights reserved. License
日外アソシエーツ株式会社日外アソシエーツ株式会社
Copyright (C) 1994- Nichigai Associates, Inc., All rights reserved.
「斎藤和英大辞典」斎藤秀三郎著、日外アソシエーツ辞書編集部編
EDRDGEDRDG
This page uses the JMdict dictionary files. These files are the property of the Electronic Dictionary Research and Development Group, and are used in conformance with the Group's licence.

©2025 GRAS Group, Inc.RSS