ASCII é só o formato de codificação de texto. Não é nem um protocolo de comunicação.
O Java permite que você escreva dados binários, portanto, você pode usar codificação ASCII ou qualquer outra, no protocolo que quiser.
O que o Java não fornece é uma forma de se comunicar por USB ou por portas seriais. Aí, só com JNI como o David falou.
Então, ou você baixa uma biblioteca de terceiros que use o JNI para você, ou implementa você mesmo usando C++ ou C.
mas ai o cara é obrigado a aprender outra linguagem?
e se for pra vários SOs? ele vai ter q implementar um pra cada e ainda C?
Sim, é obrigado. Mas não precisa se limitar ao C, pode ser C++ também.
E se for para vários SOs, ele vai ter que tomar cuidado adicional no C++ para compilar para múltiplas plataformas (isso hoje em dia é fácil, pois muitas APIs C++ já são multiplataforma e fazem comunicação com serial ou usb).
É por esse tipo de coisa que o Java não é uma linguagem muito popular para desktop.