在Java中,有没有办法控制System.in和System.out的文件编码?
Sun / Oracle使用:
java.io.BufferedInputStream - Stdin
java.io.PrintStream - Stdout
IBM使用:
com.ibm.jvm.io.ConsoleInputStream - Stdin
com.ibm.jvm.io.ConsolePrintStream - Stdout
IBM jvm出现问题,以十六进制输出数据字节数组给出:308209d606092 ...(就在写入System.out之前)
但是在同一个文件中读取并以hex形式写出:303f09d606092a3f48 ...
Sun / Oracle显示相同的十六进制值。
有没有办法控制这些输入或削减到底层的公共输入/输出流? System.out是final,实现似乎依赖于JVM。
更一般地说,使用重定向以一致的方式在应用程序之间传输文本/二进制数据?
显示如何将输入/输出数据标准化为/从System.in/out标准化的任何代码。使用Commons-IO IOUtils将流读/写到字节数组。
答案 0 :(得分:0)
我很长一段时间没有和IBM JDK合作过,但是在这里给我留言。 Stream和Reader之间存在差异。读者有效地尝试将字节数组en(de)编码为字符,它们不相同。 JVM提供程序之间可能存在差异默认编码。
所以我建议
对字节数组(例如base64)进行编码,使其成为字符,无论您使用阅读器还是流,它都应该通过运行时给出相同的结果
仅使用流 - 有效传输二进制数据