no první vylepšení je,že bych přepracoval to čtení .. obecně platí, že jakmile se kod opakuje, měl by se předělat. A koukni na tvoje metody <i>ctiI , ctiJ</i> ty jsou v podstatě totožné. Navíc přece metoda System.in.read() je přetížená, takže není nutné načítat pole bytů a to potom převádět.
To, že ti to každý komplilátor přelozí jinak není žádná novinka, zkusil bych to načítání předělat jenom metodou system.in.read() a uvidíš jak to půjde
+ system.in.read je blokovací operace, takže dle mě nemusíš to mít v cyklu