将string写入输出stream

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

现在,我收到了string。 在这里写stream的最好方法是什么?

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

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

Streams( InputStreamOutputStream )传输二进制数据。 如果你想写一个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编码)