Актуальная боевая серия Node.js play Java

Node.js Java внешний интерфейс C++
Актуальная боевая серия Node.js play Java

За прошедшие годы, с появлением Node.js, JavaScript превратился из «самого неправильно понимаемого языка в мире» в «самый популярный язык в мире». А тенденция его развития, от эволюции самого языка, роста библиотек и пакетов, улучшения инструментальной поддержки, появления звездных проектов и предметных решений, расширения платформ, технологических стеков и областей применения и т.д. никогда не видимый. вместе с Node.jsПопулярность сервисов вызовет проблемы у компаний, чьи серверные сервисы основаны на Java.Node .jsКак общаться сJavaКак насчет коммуникаций?

О чем ты говоришь сегодня?

Мы откладываем в сторону архитектурный дизайн, откладываем в сторону традиционныйhttp,socket,rpcПротокол связи, давайте поговорим об этом вNode .jsКак подключиться в приложенииJava API Другими словами, этоNode.jsнаписать напрямуюJavaкод.

node-java

Node.jsхочу иJavaДля подключения требуется модуль node-java.

Подготовка окружающей среды

Операционная система: поддержка OSX, Linux

Операционная среда (рекомендуемый выбор):

  • Установите модуль

    • Минимальные требования к версии Nodejs LTS6.x

    • java JDK 1.8+

    • Liunx gcc 4.8.1+

  1. $ npm install java

Если Linux не поддерживает c++ 11, вам необходимо вручную обновить gcc до gcc 4.8.) Адрес ссылки

если MacПодсказка: показывает, что нужно установить старую Java Среда выполнения SE 6 может быть открыта, загрузите JDK 2015

Node.js вызывает Java

HelloWorld

  • java

  1. public class HelloWorld {

  2.  public static void main(String[] args) {

  3.      System.out.println("Hello World!");

  4.  }

  5. }

скопировать код

Вывод: Привет, мир!

  • Node.js

  1. const java = require('java')

  2. const javaLangSystem = java.import('java.lang.System')

  3. javaLangSystem.out.printlnSync('Hello World!')

скопировать код

Вывод: Привет, мир!

Управление картами Java

Java-операция HashMap

  1. import java.util.HashMap;

  2. import java.util.Map;

  3. public class HashMapDemo {

  4.  public static void main(String[] args) {

  5.    Map<String, Object> map = new HashMap<>();

  6.    map.put("name", "SunilWang");

  7.    map.put("age", 20);

  8.    String name = (String) map.get("name");

  9.    int age = (int) map.get("age");

  10.    System.out.printf("name:%s", name);

  11.    System.out.println("");

  12.    System.out.printf("age:%d", age);

  13.  }

  14. }

скопировать код

Продукт: имя: SunilWang возраст: 20

Node.js синхронно вызывает java HashMap

  1. const java = require('java')

  2. const HashMap = java.import('java.util.HashMap')

  3. // 同步操作

  4. let hashMap = new HashMap()

  5. hashMap.putSync('name', 'SunilWang')

  6. hashMap.putSync('age', 20)

  7. let name = hashMap.getSync('name')

  8. let age = hashMap.getSync('age')

  9. console.log('name', name)

  10. console.log('age', age)

скопировать код

Продукт: имя: SunilWang возраст: 20

Обратный вызов Node.js вызывает java HashMap

  1. const java = require('java')

  2. const HashMap = java.import('java.util.HashMap')

  3. // callback操作

  4. let hashMap = new HashMap()

  5. hashMap.put('name', 'SunilWang', (error, info) => {

  6.  if (error) console.log('put name Error: ', error)

  7.  hashMap.get('name', (error, name) => {

  8.    if (error) console.log('get name Error: ', error)

  9.    console.log('callback name:%s', name)

  10.  })

  11. })

скопировать код

Вывод: имя обратного вызова: SunilWang

Node.js Promise вызывает java HashMap

  1. const co = require('co')

  2. const java = require('java')

  3. // 当前配置一定要在顶部声明

  4. java.asyncOptions = {

  5.  syncSuffix: 'Sync', // 同步方法名后缀

  6.  asyncSuffix: '', // 异步方法名后缀

  7.  promiseSuffix: 'Promise', // Promise方法名后缀

  8.  promisify: require('bluebird').promisify // 依赖Promise的模块

  9. }

  10. // ==============

  11. const HashMap = java.import('java.util.HashMap')

  12. // Promise操作

  13. co(function * () {

  14.  let hashMap = new HashMap()

  15.  yield hashMap.putPromise('name', 'SunilWang')

  16.  yield hashMap.putPromise('age', '20')

  17.  let name = yield hashMap.getPromise('name')

  18.  let age = yield hashMap.getPromise('age')

  19.  console.log('name', name)

  20.  console.log('age', age)

  21. })

скопировать код

Есть два способа создать экземпляр Java

  • Java

  1. import java.util.ArrayList;

  2. import java.util.List;

  3. public class ArrayListDemo {

  4.  public static void main(String[] args) {

  5.    List<String> list1 = new ArrayList<>();

  6.    List<String> list2 = new ArrayList<>();

  7.    list1.add("item1");

  8.    list2.add("item1");

  9.    System.out.printf("size: %d", list1.size()); //2

  10.    System.out.println("");

  11.    // list1 equals list2: true

  12.    System.out.printf("list1 equals list2: %s", list1.equals(list2));

  13.  }

  14. }

скопировать код

newInstanceSync

  1. const java = require('java')

  2. let list1 = java.newInstanceSync('java.util.ArrayList')

  3. console.log(list1.sizeSync()) // 0

  4. list1.addSync('item1')

  5. console.log(list1.sizeSync()) // 1

скопировать код

import & new

  1. let ArrayList = java.import('java.util.ArrayList')

  2. let list2 = new ArrayList()

  3. list2.addSync('item1')

  4. let equalValue = list2.equalsSync(list1)

  5. console.log(equalValue)// true

скопировать код

другие операции

быстрый новый набор данных

  • Java

  1. public class CharArrayDemo {

  2.  public static void main(String[] args) {

  3.    char [] charArray = "hello world\n".toCharArray();

  4.    // charArray length: 12

  5.    System.out.printf("charArray length: %d", charArray.length);

  6.  }

  7. }

скопировать код
  • Node.js

  1. let charArray = java.newArray('char', 'hello world\n'.split(''))

  2. // [ 'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '\n' ]

  3. console.log(charArray.length) // 12

скопировать код

быстрый новый длинный объект

  • Java

  1. public class LongDemo {

  2.  public static void main(String[] args) {

  3.    Long num = new Long("5");

  4.    System.out.println(num);

  5.    System.out.println(num.longValue());

  6.  }

  7. }

скопировать код
  • Node.js

  1. let javaLong = java.newInstanceSync('java.lang.Long', 5)

  2. // Possibly truncated long value: 5

  3. console.log('Possibly truncated long value: %d', javaLong)

  4. // Original long value (as a string): 5

  5. console.log('Original long value (as a string): %s', javaLong.longValue)

скопировать код

Node.js вызывает собственный скомпилированный класс

  • Java

  1. package com.nearinfinity.nodeJava;

  2. public class MyClass {

  3.  public static int addNumbers(int a, int b) {

  4.    return a + b;

  5.  }

  6. }

скопировать код
  • Node.js

  1. const java = require('java')

  2. java.classpath.push('./src')

  3. let MyClass = java.import('com.nearinfinity.nodeJava.MyClass')

  4. let result = MyClass.addNumbersSync(1, 2)

  5. console.log(result)

  6. let javaInteger = java.newInstanceSync('java.lang.Integer', 2)

  7. // 快速调用 Java 静态类里面的方法

  8. result = java.callStaticMethodSync('com.nearinfinity.nodeJava.MyClass', 'addNumbers', javaInteger, 3)

  9. console.log(result)

скопировать код

заключительные замечания

Вышеупомянутый метод предназначен только для того, чтобы вы понялиnode-javaвершина айсберга, node -javaAPI очень богатый, напримерjvm,实例一个类,调用类静态方法,快速实例化一个对象и т.п.

Самый быстрый способ научиться — посмотреть документацию, адрес документации: node-java.

——————————————————

Нажмите и удерживайте QR-код, следуйте Dazhuanzhuan FE