我有几个输出监听器正在实现OutputStream。 它可以是PrintStream写入标准输出或文件,也可以写入内存或任何其他输出目标;因此,我在该方法中将OutputStream指定为(an)参数。将字符串写入输出流
现在,我收到了字符串。在这里写入流的最佳方式是什么?
我应该只使用Writer.write(message.getBytes())吗?我可以给它的字节,但如果目标流是一个字符流,那么它会自动转换?
我需要在这里使用一些网桥流吗?
我有几个输出监听器正在实现OutputStream。 它可以是PrintStream写入标准输出或文件,也可以写入内存或任何其他输出目标;因此,我在该方法中将OutputStream指定为(an)参数。将字符串写入输出流
现在,我收到了字符串。在这里写入流的最佳方式是什么?
我应该只使用Writer.write(message.getBytes())吗?我可以给它的字节,但如果目标流是一个字符流,那么它会自动转换?
我需要在这里使用一些网桥流吗?
流(InputStream
和OutputStream
)转让二进制数据。如果要将字符串写入流中,则必须先将其转换为字节,或换句话说将其编码为。您可以使用String.getBytes(Charset)
方法手动执行此操作(如您所建议的那样),但应避免使用String.getBytes()
方法,因为它使用JVM的默认编码,无法以便携方式对其进行可靠预测。
为字符数据写入流的常用方法,不过,是包裹在一个Writer
流,(通常是一个PrintWriter
),执行转换为你当调用其write(String)
(或print(String)
)方法。 InputStreams的相应包装是Reader。
PrintStream
是一个特殊的OutputStream
实现,它还包含自动编码字符串(它在内部使用编写器)的方法。但它仍然是一个流。无论是否为PrintStream
或其他流实现,您都可以安全地使用作家打包流。没有双重编码的危险。 PrintWriter的与为OutputStream
实施例:
try (PrintWriter p = new PrintWriter(new FileOutputStream("output-text.txt", true))) {
p.println("Hello");
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
用PrintWriter包装您的OutputStream并使用该类的打印方法。他们接受一个字符串并为你做这项工作。
您可以创建一个在你的OutputStream一个PrintStream包装,然后就调用它的打印(串):
final OutputStream os = new FileOutputStream("/tmp/out");
final PrintStream printStream = new PrintStream(os);
printStream.print("String");
printStream.close();
PrintStream使用什么字符集转换为字节? – 2016-01-31 15:56:59
的OutputStream写入字节,字符串提供了字符。您需要定义字符集编码字符串为byte []:
outputStream.write(string.getBytes(Charset.forName("UTF-8")));
更改UTF-8
到您选择的字符集。
附加下面一行。 'ByteArrayOutputStream outputStream = new ByteArrayOutputStream();' – 2017-12-27 09:22:25
By design它做这种方式:
OutputStream out = ...;
try (Writer w = new OutputStreamWriter(out, "UTF-8")) {
w.write("Hello, World!");
} // or w.close(); //close will auto-flush
请注意,'w.close()'也会关闭'out'。 – 2018-01-11 16:32:18
您可以使用Apache Commons IO:
try (OutputStream outputStream = ...) {
IOUtils.write("data", outputStream, "UTF-8");
}
我不知道,但是这听起来像你试图在这里重新发明轮子,你有没有看过J? ava Base API以及Commons IO API? – posdef 2010-11-01 12:57:05