将字符串写入输出流

2023-12-24

我有几个正在实现的输出侦听器OutputStream。 它可以是PrintStream写入标准输出或文件,也可以写入内存或任何其他输出目的地;因此,我指定OutputStream作为方法中的(一个)参数。

现在,我已经收到了String。在这里写入流的最佳方式是什么?

我应该只使用Writer.write(message.getBytes())?我可以给它字节,但是如果目标流是字符流,那么它会自动转换吗?

我需要在这里使用一些桥接流吗?


流(InputStream and OutputStream) 转移binary数据。如果要将字符串写入流,则必须首先将其转换为字节,或者换句话说encode它。您可以使用以下命令手动执行此操作(按照您的建议)String.getBytes(Charset)方法,但你应该避免String.getBytes()方法,因为它使用 JVM 的默认编码,无法以可移植的方式可靠地预测。

不过,将字符数据写入流的常用方法是将流包装在Writer http://download.oracle.com/javase/8/docs/api/java/io/Writer.html,(通常是PrintWriter http://download.oracle.com/javase/8/docs/api/java/io/PrintWriter.html),当您调用它时,它会为您进行转换write(String) http://download.oracle.com/javase/8/docs/api/java/io/Writer.html#write(java.lang.String) (or print(String) http://download.oracle.com/javase/8/docs/api/java/io/PrintWriter.html#print(java.lang.String)) 方法。 InputStreams 的相应包装器是Reader http://download.oracle.com/javase/8/docs/api/java/io/Reader.html.

PrintStream是一个特殊的OutputStream实现是因为它还包含自动编码字符串的方法(它在内部使用编写器)。但它仍然是一条溪流。您可以安全地使用编写器包装您的流,无论它是PrintStream或其他一些流实现。不存在双重编码的危险。

带 OutputStream 的 PrintWriter 示例:

try (PrintWriter p = new PrintWriter(new FileOutputStream("output-text.txt", true))) {
    p.println("Hello");
} catch (FileNotFoundException e1) {
    e1.printStackTrace();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将字符串写入输出流 的相关文章

随机推荐