Quelles sont les principales différences entre ces deux bibliothèques?
La Java 9 API de Flux n'est pas une bibliothèque autonome, mais une composante de la Java Standard Edition de la bibliothèque et se compose de 4 interfaces adoptée par le Réactif de Flux de spécification établie au début de 2015. En théorie, c'est l'intégration peut permettre JDK usages spécifiques, tels que l'incubation HttpClient, peut-être planifiées Async Connexion de Base de données dans les parties, et bien sûr, SubmissionPublisher
.
RxJava est bibliothèque Java qui utilise la ReactiveX style de conception d'API pour fournir un ensemble complet d'opérateurs plus réactif (push) les flux de données. La Version 2, par Flowable
et divers XxxProcessor
s, met en œuvre le Réactif API de Flux qui permet des instances de Flowable
à être consommés par d'autres compatible avec les bibliothèques et, en retour, on peut encapsuler n'importe quel Publisher
en Flowable
à consommer ceux et composer de la richesse de l'ensemble des opérateurs avec eux.
Donc le Réactif API de Flux est le minimum spécification de l'interface et RxJava 2 est l'un de la mise en œuvre de ce sujet, ainsi que RxJava déclare un ensemble de méthodes supplémentaires pour former un riche et API fluent de son propre.
RxJava 1 a inspiré, entre autres sources, le Réactif de Flux de spécification, mais ne pouvait pas miser sur elle (devait rester compatible). RxJava 2, étant une réécriture complète et une autre version principale, pourrait embrasser et utiliser le Réactif de Flux de spécification (et même le développer en interne, grâce à la Rsc projet) et a été libéré près d'un an avant de Java 9. En outre, il a été décidé à la fois de v1 et v2 continue à soutenir la version 6 de Java et donc beaucoup de Android runtimes. Par conséquent, il ne pouvait pas tirer profit directement sur le Flux de l'API fournie aujourd'hui par Java 9 directement, mais seulement par l'intermédiaire d'un pont. Un tel pont est nécessaire et/ou fournies dans les autres Réactifs de Flux de données des bibliothèques de trop.
RxJava 3 mai cible Java 9 API de Flux, mais cela n'a pas été encore décidé, et selon quelles sont les caractéristiques de la subséquente versions de Java apporter (c'est à dire, des types de valeur), nous ne pouvons pas avoir la v3 de l'intérieur d'une année.
Jusqu'alors, il y a un prototype de bibliothèque appelée Reactive4JavaFlow qui implémente l'API de Flux et offre une ReactiveX style riche API fluent sur elle.
Pourquoi quelqu'un utiliser le Java 9 Flux de bibliothèque sur le beaucoup plus diversifiée RxJava bibliothèque ou vice-versa?
Le Flux de l'API est une spécification d'interopérabilité et pas un utilisateur de l'API. Normalement, vous ne devriez pas l'utiliser directement, mais pour transmettre des flux autour de diverses implémentations d'elle. Lorsque JEP 266 a été abordée, les auteurs n'ont trouvé aucune existant de la bibliothèque de l'API assez bon pour avoir quelque chose de défaut avec l'API de Flux (contrairement au riche, java.util.Stream
). Par conséquent, il a été décidé que les utilisateurs devront appuyer sur la 3e partie des implémentations pour l'instant.
Vous devez attendre pour les réactifs bibliothèques à l'appui de l'API de Flux en mode natif, par le biais de leur propre pont de la mise en œuvre ou de nouvelles bibliothèques à être mis en œuvre.
Offrant un riche ensemble d'opérateurs sur le Flux de l'API est la seule raison pour laquelle une bibliothèque de la mettre en œuvre. Source de données fournisseurs (c'est à dire, les réactions des pilotes de base de données, réseau des bibliothèques) peuvent commencer à mettre en œuvre leurs propres données accesseurs via l'API de Flux et de s'appuyer sur la richesse des bibliothèques pour l'envelopper de ceux et de fournir de la transformation et de la coordination pour eux sans forcer tout le monde à mettre en œuvre toutes sortes de ces opérateurs.
Par conséquent, une meilleure question est, si vous commencez à utiliser l'API de Flux basé sur l'interopérabilité maintenant, ou s'en tenir à Réactif Flux?
Si vous avez besoin des solutions fiables et relativement peu de temps, je vous suggère de coller avec le Réactif de Flux de l'écosystème pour l'instant. Si vous avez beaucoup de temps ou si vous souhaitez explorer les choses, vous pourriez commencer à utiliser l'API de Flux.