¿Cómo definiría un nuevo tipo de java.nio.channels.SelectableChannel
(por ejemplo, para puertos serie)?¿Cómo puedo definir mi propio SelectableChannel?
Respuesta
Mi entendimiento es que la aplicación Java se basa en la función de Unix select()
c (me parece recordar que la aplicación de Windows era ligeramente diferente)
función del sistema operativo (y argumentos de JVM!) Diferentes funciones del sistema operativo nativo son llamado, pero lo que tienen en común es que es un código nativo; la funcionalidad básica no está implementada en Java.
Si desea crear una lib que acceda al select()
(o similar) del sistema operativo subyacente (que de hecho se basa en manejadores de archivos), creo que se ve forzado a utilizar JNI. No creo que haya ninguna forma de evitarlo.
El Selector/SelectableChannel en Java es realmente un subconjunto anémico de lo que select()
puede hacer.
Es probable que desee extender java.nio.channels.spi.AbstractSelectableChannel
para crear la implementación que necesita. Si está pidiendo algo diferente, necesita hacer una pregunta más detallada. El código fuente de JDK se puede descargar bajo unas pocas licencias diferentes, dependiendo de la versión que esté descargando. Tiene la opción de ver las implementaciones de JDK (java.nio.channels.Channel
, java.nio.channels.SocketChannel
, etc.) para comprender completamente lo que necesita implementar. Sin embargo, si hace esto, tenga cuidado de no copiar el código de la fuente JDK a menos que pueda obedecer la licencia del código fuente que descargó.
El libro Java NIO puede ayudarlo.
¿Cómo se puede implementar AbstractSelectableChannel cuando no tiene un SelectorProvider a mano? Se supone que SelectableChannel.provider() devolverá el proveedor que creó el canal, pero el proveedor predeterminado no puede haber creado su implementación. – Gili
Supongo que mi punto es que en algún lugar debajo del capó, alguien debe estar invocando un bajo nivel select() contra los identificadores de archivo. No está claro cómo SelectableChannel proporciona Selector con la información necesaria para hacer su trabajo. ¿Cómo puede este último saber cuándo mi SelectableChannel está listo para leer, escribir, etc.? – Gili
- 1. ¿Cómo puedo escribir mi propio programador Hadoop?
- 2. ¿Cómo puedo crear mi propio archivo vsdoc.js para mi JavaScript?
- 3. Excepción en scala al definir mi propio método toInt
- 4. Cuando debería definir mi propio operador de copia y asignación
- 5. ¿Cómo puedo implementar "Soy mi propio abuelo" en Prolog?
- 6. ¿Cómo puedo determinar si document.referrer es de mi propio sitio?
- 7. ¿Cómo puedo escribir mi propio complemento para Webstorm?
- 8. ¿Cómo puedo bifurcar mi propio repositorio de GitHub?
- 9. ¿Cómo puedo crear mi propio diseñador de formularios?
- 10. Cómo definir su propio servidor con Rails 3
- 11. ¿Cómo declarar mi propio CGRectZero como constante?
- 12. Desarrollando mi propio CMS
- 13. Cómo crear mi propio formulario en joomla
- 14. Cómo crear mi propio dotnet obfuscator
- 15. Excel 2003 - ¿Cómo construir mi propio XLA?
- 16. Cómo escribir mi propio Smarty If-case
- 17. ¿Cómo podría hacer mi propio iterador perezoso?
- 18. ¿Puedo crear mi propio certificado digital en C# o Windows?
- 19. Escribiendo mi propio compilador C++
- 20. ¿Cómo creo mi propio formato ToString() personalizado?
- 21. ¿Cómo creo mi propio ostream/streambuf?
- 22. Cómo imitar string.Format() en mi propio método?
- 23. ¿Cómo comenzaría a escribir mi propio firewall?
- 24. ¿Cómo crear mi propio motor de recomendación?
- 25. ¿Cómo escribir mi propio contenedor en C#?
- 26. ¿Puedo alojar repositorios privados de Git en mi propio servidor?
- 27. ¿Puedo usar valores personalizados de UIControlState para mi propio control?
- 28. ¿Puedo crear mi propio objeto de matriz en JavaScript?
- 29. ¿Puedo hacer ingeniería inversa de mi propio dll?
- 30. NIO Buenas Prácticas - SelectableChannel y InterestOps
En otras palabras, ¿no hay forma de definir su propio SelectableChannel? – Gili
A juzgar por el código fuente de Selector y SelectableChannel, no veo ninguna forma de evitar el hecho de que si desea definir su propio SelectableChannel, entonces lo que necesita hacer es escribir (y registrar) un nuevo SelectorProvider que proporcione su propio nuevo implementaciones nuevas de Selector y SelectableChannel (necesitan emparejarse) que admitan la funcionalidad extendida que desee (usando JNI o algún otro método). – Nuoji
¡El POE lo hizo bien! [POE :: Filter] (http://search.cpan.org/~rcaputo/POE/lib/POE/Filter.pm). – woky