Java流链接

lxg*_*xgr 5 java io

将对流的引用“进一步向下”过滤器链,并再次使用这些较低级别的流,或者甚至将一种类型的流交换为另一种流,这是不好的样式吗?例如:

    OutputStream os = new FileOutputStream("file");
    PrintWriter pw = new PrintWriter(os);
    pw.print("print writer stream");
    pw.flush();
    pw = null;
    DataOutputStream dos = new DataOutputStream(os);
    dos.writeBytes("dos writer stream");
    dos.flush();
    dos = null;
    os.close();
Run Code Online (Sandbox Code Playgroud)

如果是这样,如果我需要使用两个流的功能,例如,如果我想向流中写入几行文本,然后是二进制数据,反之亦然,那有什么选择呢?

Mic*_*rdt 4

在某些情况下可以这样做,但很容易出错。您需要小心缓冲区和诸如ObjectOutputStream.

如果我想将几行文本写入流,然后写入二进制数据,反之亦然?

为此,您需要知道的是,您可以将文本转换为二进制数据并返回,但始终需要指定编码。然而,它也容易出错,因为人们倾向于使用使用平台默认编码的 API 方法,当然,您基本上是在为自定义二进制文件格式实现解析器 - 很多事情都可能会出错。

总而言之,如果您要创建文件格式,特别是在混合文本和二进制数据时,最好使用现有框架,例如Google protocol buffers