`
zfting
  • 浏览: 1919 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

PrintStream的弊端!

阅读更多
我们在学习java的第一个程序“Hello World”,就开始使用System.out.println(),System.out就是一个PrintStream(当然其他数出流也可以连接public PrintSteam(OutputStream out)和public PrintSteam(OutputStream out,boolean autoFlush)在默认情况下显示刷新,如果autoFlush参数为true,则在每输入一个字节数组或换行,或则调用println()时就刷新)。

      Println()在进行操作的时候会写入一些与平台有关的行分隔字符,在Unix和Mac OS X下是 ,在Mac9下是 ,在windows下是。
第一个问题是println的输出是与平台有关的,所以写入控制台不会产生任何的问题。但是对于网络客户端和服务器而言就会出现大的问题!大多数网络协议,如Http和Gnutela,指明换行应当为。所以使用println能编写出能正常工作的windows下的程序但是不能工作在Unix和Mac下,在加上readLine()中本身的bug,如果让带有prinln()的程序会使得服务器和客户端都挂起。
      第二个问题是,如果PrintSteam使用的是      所在平台使用的默认编码方式。但是,乐中编码方式并不是服务期或客户端所期望的。例如一个接收XML文件的WEB希望以UTF-8或UTF16编码,但是一个使用PrintStream的WEB服务器可能在中国——本地化环境系统上发送GBK或GB2312的编码的文件,而不管客户端是否期望或理解这些方式。那么出现可能出现编码失败或者挂起。
      第三个问题是PrintStraem吞掉所有的异常。这就是得PrintStream很适合作为教科书程序,如HelloWorld为了讲受简单的控制台输出,不让学生去理解复杂的异常处理。但是在WEB程序中往往会出现连接中断、带宽提供商的错误、远程系统崩溃和其他不可预知得原因而断开。所以网络程序必须具备处理数据流中意料之外的中断。完成这一点的方法是处理异常。但是PrintStream捕获了低层输出流抛出的所有异常。并且在PrintStream中5个标准的方法并没有throws IOException()的声明:
public abstract void write();
public void write(byte[] data);
public void write(byte[] data,int offset,int length);
public void flush();
public void close();
作为替代PrintStream要依靠一个过时标志。如果在底层出现异常,就会设置这个标志,并且程序员要通过checkError()方法检查此标志的值:public boolean checkError().
简单地说printStream提供的错误通知对于不可靠的网络连接而言,是不完全的。
文章来源:e社会在此还有对readLine()的分析
解决办法下载地址
分享到:
评论

相关推荐

    PrintStream,StringBuilder,Formatter

    在Java编程语言中,`PrintStream`, `StringBuilder` 和 `Formatter` 是三个非常重要的类,分别用于不同的输出处理。理解并熟练使用这三个类是提升Java编程能力的关键。 首先,我们来详细了解一下`PrintStream`。它...

    PrintStream 介绍_动力节点Java学院整理

    PrintStream 是打印输出流,它继承于FilterOutputStream。 PrintStream 是用来装饰其它输出流。它能为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。 与其他输出流不同,PrintStream 永远不会抛出...

    java 输出流中的PrintStream 和 PrintWriter有什么区别

    java 输出流中的PrintStream 和 PrintWriter有什么区别

    java学习笔记--PrintStream分享.pdf

    Java学习笔记--PrintStream分享 PrintStream是一种输出流,能够将Java基本数据类型转换为系统预设编码下的字元,再输出至OutputStream中。在Java I/O流中,PrintStream是OutputStream的子类,主要用于将数据输出至...

    PrintStream和PrintWriter的区别简介

    "PrintStream和PrintWriter的区别简介" PrintStream和PrintWriter都是Java中的输出流类,都是用于将数据输出到目标设备的类,但是它们之间存在一些关键的区别。 首先,从构造方法上看,PrintStream和PrintWriter的...

    浅谈PrintStream和PrintWriter的区别和联系

    浅谈PrintStream和PrintWriter的区别和联系 PrintStream和PrintWriter都是Java中的输出流类,但它们之间存在着一些区别和联系。本篇文章将通过示例代码详细介绍这两者之间的区别和联系,希望能够对大家的学习或者...

    Java 中的Printstream介绍_动力节点Java学院整理

    Java 中的 PrintStream 介绍 PrintStream 是 Java 中的一种打印输出流,它继承自 FilterOutputStream。PrintStream 的主要功能是装饰其他输出流,使它们能够方便地打印各种数据值表示形式。 PrintStream 的特点是...

    JAVA_打印流例子

    在Java编程语言中,打印流(PrintStream)是用于输出文本信息的重要类,它属于`java.io`包。本文将深入探讨Java打印流的概念、用途、功能以及如何通过实例进行操作。 **一、打印流的概念** Java PrintStream 类提供...

    PrintStream的用法2---马克-to-win java视频

    PrintStream的用法2---马克-to-win java视频

    PrintStream的用法1---马克-to-win java视频

    PrintStream的用法1---马克-to-win java视频的详细描述与介绍

    实验3 输入输出流的实验.doc

    本实验主要介绍了 Java 中的输入输出流,包括 DataInputStream、DataOutputStream、PrintStream 等类的使用,以及对象的序列化和反序列化。通过实验,我们可以掌握流的概念分类、字符串常用操作方法、流的构造和应用...

    Arduino-PrintStream:一个简单的库,添加`std

    用法示例# include < PrintStream>void setup () { Serial. begin ( 115200 ); Serial << " Hello, World! " << endl; Serial << F ( " Counting to 0xf in hexadecimal: " ) << hex <&...

    Java软件开发实战 Java基础与案例开发详解 13-8 打印流 共6页.pdf

    - **PrintStream** 和 **PrintWriter** 都是打印流,它们提供了一系列的 `print` 和 `println` 方法,用于输出基本数据类型的数据,并将其格式化为字符串形式。 - **PrintStream** 和 **PrintWriter** 的输出操作...

    Java 标准化输出

    PrintStream,StringBuilder,Formatter

    java学习中调试过程中经常遇到的错误

    java":变量b已经在main(java.lang.String[])方法中定义19行5列处解决方案: 1、重命名变量,确保每个变量名称在方法内唯一。 2、检查变量作用域,避免重复定义。 ### Java学习中调试过程中常见错误分析 ...

    java键盘输入输出练习.java

    对于不同数据类型的数据进行输入输出练习。过程中使用导入Scanner包,Scanner中创建Scanner类型的变量,内容详细易懂,适合Java新手练习

    java输入输出流实习题

    PrintStream printStream = new PrintStream(new FileOutputStream(logFile, true)); printStream.println("[当前时间] [" + logType + "] " + content); printStream.close(); ``` `readLog`方法则需要读取文件中...

    ACM中使用java(完整版)

    PrintStream out = new PrintStream(new FileOutputStream("pc2.estdout")); System.setOut(out); System.out.println("Hello World!"); out.close(); } } ``` 在上面的代码中,我们首先创建了一个 `...

    java读取文件大全

    PrintStream ps = new PrintStream(new FileOutputStream(file)); for (int i = 0; i ; i++) { ps.println("这是第" + i + "行"); } ps.close(); } catch (FileNotFoundException e) { e.printStackTrace...

    ACM中使用java

    1. **创建PrintStream对象**:首先需要创建一个`PrintStream`对象,并将其指向想要输出的文件。 ```java PrintStream out = new PrintStream(new FileOutputStream("output.txt")); ``` 2. **设置System.out**...

Global site tag (gtag.js) - Google Analytics