【问题标题】:What is the difference between OutputStream and Writer?OutputStream 和 Writer 有什么区别?
【发布时间】:2012-06-04 16:53:53
【问题描述】:

谁能解释一下OutputStreamWriter 之间的区别?我应该使用以下哪些类?

【问题讨论】:

  • 在这方面没有获得密切的投票。这是一个真实的问题,有真实的答案。
  • 我的近距离投票是因为真正的答案在 Javadoc 中,OP 应该首先查看,所以这个问题没有永久价值。

标签: java outputstream


【解决方案1】:

流在字节级别工作,它们可以读取 (InputStream) 和写入 (OutputStream) 字节或字节列表到流。

Reader/Writers 在流的顶部添加了字符的概念。由于字符只能通过使用编码转换为字节,因此读取器和写入器具有编码组件(可以自动设置,因为 Java 具有默认编码属性)。读取(Reader)或写入(Writer)的字符通过编码自动转换为字节并发送到流中。

【讨论】:

    【解决方案2】:

    OutputStream逐字节写入目标,而 Writer逐字符写入目标>

    【讨论】:

    • 值得注意的是,Java 中的 Character 是用词不当,因为它实际上代表 UTF-16 Code Unit,而不是 Unicode CharacterCode Point
    【解决方案3】:

    OutputStream 是可以写入信息的流。这是相当普遍的,因此有专门的OutputStream 用于特殊目的,例如写入文件。流只能写入字节数组。

    Writers 提供了更大的灵活性,因为它们可以在考虑特殊编码的同时写入字符甚至字符串。

    拿哪一个真的是你想写什么的问题。如果你已经有字节,你可以直接使用流。如果您有字符或字符串,如果您想将它们写入流,则需要自己将它们转换为字节,或者您需要使用 Writer 来为您完成这项工作。

    【讨论】:

    • 您永远不能将字符写入流,它们必须首先被编码为字节,这在 Java 中意味着它们将始终转到OutputStream,例如通过OutputStreamWriter。跨度>
    • 我没有说你可以将字符写入流 - 我说你可以使用 Writer 将字符串写入流,而仅使用流时不能这样做。编辑了我的答案以使其更清楚。
    • 字符串是一个字符序列(或者在 Java 中是一个代码单元序列),所以不,你不能将字符串写入流,它们必须首先被编码为字节。
    • 请引用我所说的可以将字符串写入流的那一行。
    • 你编辑了它,然后你说“我说你可以使用Writer 将字符串写入流”
    【解决方案4】:

    OutputStream 使用裸字节,而Writer 使用编码 字符。

    【讨论】:

    【解决方案5】:

    Reader/Writer 类层次结构是面向字符的,Input Stream/Output Stream 类层次结构是面向字节的。 基本上有两种类型的流。用于处理字节流的字节流和用于处理字符流的字符流。在字节流中,输入/输出流是层次结构顶部的抽象类,而写入器/读取器是抽象的字符流层次结构顶部的类。

    More details here

    干杯!!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-02
      • 1970-01-01
      • 1970-01-01
      • 2018-05-22
      • 2010-10-02
      • 2011-12-12
      相关资源
      最近更新 更多