将string写入输出stream
我有几个输出监听器正在实现OutputStream。 它可以是PrintStream写入标准输出或文件,也可以写入内存或任何其他输出目的地; 因此,我在该方法中将OutputStream指定为(an)参数。
现在,我收到了string。 在这里写stream的最好方法是什么?
我应该只使用Writer.write(message.getBytes())? 我可以给它的字节,但如果目标stream是一个字符stream,那么它会自动转换?
我需要在这里使用一些桥stream吗?
Streams( InputStream
和OutputStream
)传输二进制数据。 如果你想写一个string到一个stream,你必须先把它转换成字节,或换句话说就是对它进行编码 。 您可以使用String.getBytes(Charset)
方法手动(如您所build议的)执行此操作,但应避免使用String.getBytes()
方法,因为该方法使用JVM的默认编码,无法在一个便携的方式。
然而,将字符数据写入stream的常用方法是将stream封装在Writer
中(通常是PrintWriter
),在调用write(String)
(或print(String)
)方法时为您进行转换。 InputStreams的相应包装器是一个Reader 。
PrintStream
是一个特殊的OutputStream
实现,它也包含自动编码string的方法(它在内部使用编写器)。 但它仍然是一个stream。 无论是PrintStream
还是其他stream实现,您都可以安全地使用作者来封装stream。 没有双重编码的危险。
带有OutputStream的PrintWriter示例:
try (PrintWriter p = new PrintWriter(new FileOutputStream("output-text.txt", true))) { p.println("Hello"); } catch (FileNotFoundException e1) { e1.printStackTrace(); }
OutputStream写入字节,String提供字符。 您需要定义字符集来将string编码为byte []:
outputStream.write(string.getBytes(Charset.forName("UTF-8")));
将UTF-8
更改为您select的字符集。
你可以创build一个包装你的OutputStream的PrintStream,然后调用它的print(String):
final OutputStream os = new FileOutputStream("/tmp/out"); final PrintStream printStream = new PrintStream(os); printStream.print("String"); printStream.close();
用PrintWriter包装你的OutputStream并使用该类的打印方法。 他们采取一个string,为你做的工作。
按照devise要这样做:
OutputStream out = ...; try (Writer w = new OutputStreamWriter(out, "UTF-8")) { w.write("Hello, World!"); } // or w.close(); //close will auto-flush
您可以使用Apache Commons IO :
try (OutputStream outputStream = ...) { IOUtils.write("data", outputStream, "UTF-8"); }
- IOUtils.write(string数据,OutputStream输出,string编码)