Java System.in和System.out在Sun / Oracle和IBM JVM之间有所不同 - 读写标准字节数组

时间:2017-02-13 13:30:53

标签: java encoding system.out

在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将流读/写到字节数组。

1 个答案:

答案 0 :(得分:0)

我很长一段时间没有和IBM JDK合作过,但是在这里给我留言。 Stream和Reader之间存在差异。读者有效地尝试将字节数组en(de)编码为字符,它们不相同。 JVM提供程序之间可能存在差异默认编码。

所以我建议

  • 对字节数组(例如base64)进行编码,使其成为字符,无论您使用阅读器还是流,它都应该通过运行时给出相同的结果

  • 仅使用流 - 有效传输二进制数据