Für JENV wurden analog zu OS/390 verschiedene neue Klassen und Methoden für die Localized Streams implementiert und damit einige der ASCII/EBCDIC-Probleme gelöst. Als Anwendungsprogrammierer sollten Sie aber konsequent die von Oracle America Inc. definierten Klassen InputStreamReader und OutputStreamWriter zur Ein-/Ausgabe von Text verwenden.
Die zu diesem Zweck implementierten neuen Klassen sind:
com.fujitsu.ts.java.io.LocalizedInputStream
com.fujitsu.ts.java.io.LocalizedOutputStream
com.fujitsu.ts.java.io.LocalizedPrintStream
Diese Klassen können nicht instanziiert werden, sie bieten aber eine statische Methode localize() an, die einen gegebenen Stream in einen „Localized Stream“ umwandeln, wenn der gegebene Stream auf einer Datei basiert.
Diese Methoden sind:
com.fujitsu.ts.java.io.LocalizedInputStream.localize(InputStream)
com.fujitsu.ts.java.io.LocalizedOutputStream.localize(OutputStream)
com.fujitsu.ts.java.io.LocalizedPrintStream.localize(OutputStream)
Diese Methoden liefern im BS2000 einen InputStream bzw. OutputStream zurück, dessen Verhalten gegenüber dem ursprünglichen Stream dergestalt modifiziert ist, dass die gesamte E/A über diesen Stream der Codeset-Konvertierung von bzw. nach dem implementierten Standard-Codeset (Wert der System-Property file.encoding) unterliegt. Dies geschieht allerdings nur für Streams, die auf Dateien basieren. Auf andere Streams (z.B. ByteArray) haben diese Methoden keine Auswirkung.
Diese so modifizierten Streams verhalten sich also analog zu den Objekten der neuen Klassen InputStreamReader und OutputStreamWriter, bleiben aber im Gegensatz dazu vom Datentyp InputStream bzw. OutputStream, können also überall dort verwendet werden, wo nur Objekte dieser Typen zulässig sind.
Vorkehrungen gegen Doppel-Konvertierungen sind getroffen. So kann ein Stream nicht zweimal „Localized“ werden. Beim Aufruf einer getLocalized...-Methode für einen bereits lokalisierten Stream, wird dieser einfach wieder zurückgegeben. Auch von einem „Localized Stream“ kann eine Instanz eines InputStreamReader bzw. OutputStreamWriter gebildet werden, ohne dass deswegen Doppel-Konvertierungen befürchtet werden müssen.
Diese JENV-spezifische Erweiterung kann abgeschaltet werden, indem die System-Property java.localized.streams auf den Wert False gesetzt wird. Dies kann beim Aufruf von Java über -Djava.localized.streams=False erreicht werden.