Write string to output stream

后端 未结 6 842
误落风尘
误落风尘 2020-12-04 07:34

I have several output listeners that are implementing OutputStream. It can be either a PrintStream writing to stdout or to a File, or it can be writing to memory or any othe

6条回答
  •  [愿得一人]
    2020-12-04 08:16

    Streams (InputStream and OutputStream) transfer binary data. If you want to write a string to a stream, you must first convert it to bytes, or in other words encode it. You can do that manually (as you suggest) using the String.getBytes(Charset) method, but you should avoid the String.getBytes() method, because that uses the default encoding of the JVM, which can't be reliably predicted in a portable way.

    The usual way to write character data to a stream, though, is to wrap the stream in a Writer, (often a PrintWriter), that does the conversion for you when you call its write(String) (or print(String)) method. The corresponding wrapper for InputStreams is a Reader.

    PrintStream is a special OutputStream implementation in the sense that it also contain methods that automatically encode strings (it uses a writer internally). But it is still a stream. You can safely wrap your stream with a writer no matter if it is a PrintStream or some other stream implementation. There is no danger of double encoding.

    Example of PrintWriter with OutputStream:

    try (PrintWriter p = new PrintWriter(new FileOutputStream("output-text.txt", true))) {
        p.println("Hello");
    } catch (FileNotFoundException e1) {
        e1.printStackTrace();
    }
    

提交回复
热议问题