【问题标题】:What is the exact difference between out.write() and out.print()out.write() 和 out.print() 之间的确切区别是什么
【发布时间】:2013-08-20 14:48:22
【问题描述】:

在我的 servlet 中,我同时提供了 out.printout.write。但两者都在浏览器中打印。

这两者之间的确切区别是什么以及何时使用out.printout.write

【问题讨论】:

  • out 的类型是什么?文档怎么说?

标签: java servlets printwriter


【解决方案1】:

基本的区别是out.write()如果你传递一个空值就会爆炸:

String s = null;
out.print(s); // outputs the text "null"
out.write(s); // NullPointerException

【讨论】:

    【解决方案2】:

    PrintWriter:

    public void write(String s)

    写一个字符串。此方法不能从 Writer 类继承 因为它必须抑制 I/O 异常。

    print 方法具有更高的抽象级别。

    public void print(String s)

    打印一个字符串。如果参数为空,则字符串“null”为 打印。否则,字符串的字符将转换为字节 根据平台的默认字符编码,而这些 字节完全按照 write(int) 方法的方式写入。

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      有三个主要区别:

      1) 如果您尝试使用 out.write() 打印字符串的空值,则会抛出 NullPointerExceptionout.print() 将简单地将 NULL 打印为字符串。

       String name = null;
       out.write(name); // NullPointerException
       out.print(name); // 'Null' as text will be printed
      

      2) out.print() 可以打印布尔值,但 out.write() 不能。

      boolean b = true;
      out.write(b); // Compilation error
      out.print(b); // 'true' will be printed 
      

      3) 如果你使用out.write(),你根本无法放置算术运算代码,out.print() 提供支持。

      out.write(10+20); // No output will be displayed.
      out.print(10+20); // Output '30' will be displayed. 
      

      【讨论】:

        【解决方案4】:

        在您的情况下,out 变量很可能是指 PrintWriter

        对比一下write的描述就...

        public void write(String s)

        写一个字符串。此方法不能从 Writer 类继承,因为它必须抑制 I/O 异常。

        ... 带有 println 的描述 ...

        public void println(String x)

        打印一个字符串,然后终止该行。这个方法的行为就好像它调用了 print(String) 然后 println()。

        ...并打印...

        public void print(String s)

        打印一个字符串。如果参数为空,则打印字符串“null”。否则,将字符串中的字符按照平台默认的字符编码转换为字节,这些字节完全按照write(int)方法的方式写入。

        总而言之,我会说打印方法在更高的抽象级别上工作,并且是我在编写 servlet 时更喜欢使用的方法。

        【讨论】:

          【解决方案5】:

          PrintWriter 的实现比 javadoc 更好地传达了差异

          public void print(String s) {
              if (s == null) {
                  s = "null";
              }
              write(s);
          }
          

          【讨论】:

            【解决方案6】:

            首先你不能在 servlet 中使用javax.​servlet.​jsp.​JspWriter out。它必须在.jsp 文件中使用,因为out.jsp 文件的_jspService(...) 方法中的方法局部变量。

            使用out.print()out.write() 的目的没有区别。 两者都用于将给定对象的String 版本写入JspWriter 的缓冲区。

            但是,JspWriter.print() 能够接受比 Writer.write() 更多类型的参数。

            JspWriter.print()

            • 对象
            • 字符串
            • 布尔值
            • 字符
            • 字符[]
            • 浮动
            • int

            Writer.write()

            • 字符串
            • 字符
            • int

            【讨论】:

              【解决方案7】:

              write() 方法只将字符写入流(或控制台)但不打印,而 print() 方法将其写入并打印到流(或控制台)。

              System.out.write(97);
              System.out.print('j');
              

              第一条语句在控制台上写入字符 97 即“a”但不打印,而第二条语句打印已经写入流中的“a”和在 print() 方法中传递的“j”。

              【讨论】:

              • 那么写入的数据去了哪里?
              • 它保持在流中,直到流不刷新,刷新后流数据将在控制台上打印。 print() 方法刷新之前的数据并打印传入的数据。
              【解决方案8】:

              我就是这样认识的:

              out.println()javax.​servlet.​jsp.​JspWriter的方法

              out.write()java.io.Writer的方法

              【讨论】:

                【解决方案9】:

                out.write(-) 与 out.print(-)

                还有一个区别是 out.write(-) 方法只是像文件一样将数据或对象写入浏览器。你不能写任何像 out.write(10*20); 这样的语句,但是我们用 out.print(10*20);

                来做到这一点

                【讨论】:

                  猜你喜欢
                  • 2016-01-19
                  • 2013-03-25
                  • 2016-01-19
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多