`

java中OutputStream和PrintWriter同时使用的问题。。。。

    博客分类:
  • Java
阅读更多

之前遇到的一个问题,现在记录下来~

 

import java.io.*; 
  
class IODemo09 
{ 
    public static void main(String args[]) throws Exception 
    { 
        OutputStream out1 = null; 
  
        out1 = System.out; 
        out1.write(new String("hello buaa!").getBytes()); 
        out1.close(); 
                  /* 不能同时使用??? 
        PrintWriter out2 = new PrintWriter(System.out); 
        out2.println("hello buaa!"); 
        out2.close(); 
             */ 
    } 
} 

 

 

问:现在out1可以向屏幕输出,但取消注释后,out2不能向屏幕输出,如果只注释掉out1,则out2可以向屏幕输出。请问高手,这是为什么呢?

问题补充:
注释掉第11行是可以了,为什么注释掉就可以了呢? 这两个流有什么关系么?

答:PrintWriter是以System.out为底层流(不是底层writer)。
啊,或许你没有留意到:out1 = System.out是让out1与System.out指向了同一个流,也就是标准输出流;这个赋值并没有创建新的流,只是增添了一个指向标准输出流的引用而已。out1.close()就等同于System.out.close()。

因为你把System.out给关掉了,然后又把System.out作为参数创建了一个新的PrintWriter实例……后者只是将System.out作为底层writer,对这个底层做了个包装而已。现在你把底层先关掉了,后面自然什么也输出不了。你可以试试在不注释掉第11行的情况下在后面写个System.out.println("test");,照样是什么也没有——标准输出流也就是个普通的流而已,你把它关了它就没了 =v=

 

分享到:
评论

相关推荐

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

    Java学习笔记--PrintStream分享 ...PrintStream和PrintWriter都是Java I/O流中的重要组件,它们可以帮助开发者快速地输出数据,但是我们需要了解它们之间的区别和使用场景,以便更好地完成编程任务。

    java文件流

    在 Java 中,也可以使用 BufferedReader 和 PrintWriter 类来读写文件。这些类可以用于读写文本文件。 Java 中的输入输出是以流(Stream)来方式来处理的,流是在计算机的输入、输出操作中流动的数据序列。在 Java ...

    如何使用java语言中socket关键字通信

    本文将深入探讨如何在Java中使用Socket关键字进行通信,以及它与相关工具的结合使用。 一、Socket基础知识 Socket,也被称为套接字,是网络编程中的一个抽象概念,它代表了两台计算机之间的连接点。在TCP/IP协议族...

    java网络通信TCP

    在这个Java项目中,我们专注于使用TCP进行网络通信,提供了完整的UI界面,便于学习和实践。 TCP协议的特点包括: 1. 面向连接:在数据传输前,TCP需要建立一个连接,即三次握手过程,确保双方都能正常通信。 2. ...

    web服务器(JAVA网络编程)

    对于HTTP响应的构建,我们可以使用Java的OutputStream或PrintWriter对象来写入响应头和响应体。响应头通常包含状态码(如200表示成功,404表示未找到),以及一些额外的头部信息,如Content-Type指示响应的数据类型...

    Java Socket实现简单点对点聊天软件

    在这个聊天系统中,服务器端和客户端都会使用InputStream和OutputStream来读取和发送数据,如`java.io.BufferedReader`和`java.io.PrintWriter`,分别用于高效地读取和打印数据。 5. **字符编码**:在网络通信中,...

    北交大java习题(大一版)

    10. **输入输出(I/O)**:学习使用Java的InputStream和OutputStream进行文件读写,或者使用Scanner和PrintWriter进行用户交互。 11. **集合框架**:了解ArrayList,LinkedList,HashSet,HashMap等集合类的使用,...

    JAVA API官方文档中文版

    I/O流是Java处理数据输入输出的主要手段,`java.io`包下有多种流类型,如`FileInputStream`、`OutputStream`、`BufferedReader`、`PrintWriter`等,它们支持字节流和字符流,以及输入流和输出流的操作。 数据库连接...

    Java Socket聊天和文件传输工具(更新)

    在这个“Java Socket聊天和文件传输工具”中,开发者结合了实时聊天和文件传输的功能,使得用户可以在进行文字交流的同时,无缝地进行文件的交换。这个工具在局域网环境中已经过初步测试,表明其稳定性和效率都达到...

    JAVA网络编程实例(TCP通信)

    TCP通信中,我们还可以使用`BufferedReader`和`PrintWriter`等流类进行更方便的文本数据交换,或者使用`ObjectInputStream`和`ObjectOutputStream`进行对象的序列化传输。同时,为了提高效率,可以考虑使用多线程...

    Java IO操作和将字符串解析为数值数组

    在Java中,我们通常使用`BufferedReader`和`PrintWriter`进行文本文件的读写。例如,`BufferedReader`用于读取字符,`readLine()`方法可以逐行读取文本,而`PrintWriter`用于向输出流写入字符,`println()`方法方便...

    java I/O类的使用

    Java 1.0 和 1.1 中的I/O类主要是基于两个基础类:`InputStream`和`OutputStream`,它们处理字节流。`InputStream`家族包括了如`ByteArrayInputStream`、`FileInputStream`等,它们分别从字节数组或文件中读取数据。...

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

    Java中的PrintWriter介绍 PrintWriter是Java中的一种字符类型的打印输出流,继承于Writer。它用于向文本输出流打印对象的格式化表示形式。PrintWriter提供了多种构造方法,例如PrintWriter(OutputStream out)、...

    java Echo服务的客户端是如何实现的?

    1. **导入必要的库**:首先,我们需要导入 `java.net.Socket` 和 `java.io.*` 相关的库,因为我们将使用这些类进行网络通信和数据处理。 ```java import java.io.*; import java.net.*; public class EchoClient {...

    Java写的简易聊天室

    在Java中,`InputStream` 和 `OutputStream` 是处理二进制数据的基础类,而 `InputStreamReader` 和 `OutputStreamWriter` 则用于处理字符流,它们提供了将字节流转换为字符流的功能。在聊天室的例子中,我们可能会...

    java基于TCP的简单聊天室

    在Java中,可以使用`Thread`类或者`Runnable`接口来创建和管理线程。 4. **登录功能**:聊天室的登录功能可能涉及到用户认证,这可能包括用户名和密码的验证。在Java中,可以使用`java.util.Scanner`读取用户输入,...

    Java中的那些“流”之JAVA基础知识之我的理解8

    在Java编程语言中,“流”(Stream)是一个重要的概念,它是处理数据的一种抽象方式,尤其在I/O操作和集合框架中扮演着核心角色。本文将深入探讨Java中的“流”以及与之相关的基础知识,结合博客文章《Java中的那些...

    Java 的二进制和文本输入输出

    Java 中的序列化可以使用 ObjectOutputStream 和 ObjectInputStream。 ObjectInput 和 ObjectOutput Java 中的 ObjectInput 和 ObjectOutput 是指用于序列化和反序列化对象的流。ObjectInput 和 ObjectOutput 可以...

Global site tag (gtag.js) - Google Analytics