java I/O———System类对IO的支持

13 篇文章 0 订阅

学习完PrintStream与PrintWriter后,我们发现里面的方法名都很熟悉。例如:print()、println(),实际上我们一直在使用的系统输出就是利用了IO流的模式完成。在System类中定义了三个操作的常量。

  1. 标准输出(显示器) : public final static PrintStream out
  2. 错误输出 : public final static PrintStream err
  3. 标准输入(键盘):public final static InputStream in

一直在使用的System.out.println()属于IO的操作范畴

1.系统输出

系统输出一共有两个常量:out、err,并且这两个常量表示的都是PrintStream类的对象。

  1. out输出的是希望用户能看到的内容
  2. err输出的是不希望用户看到的内容

这两种输出在实际的开发之中都没用了,取而代之的是"日志"。

在这里插入图片描述

System.err只是作为一个保留的属性而存在,现在几乎用不到。唯一可能用到的就是System.out。

由于System.out是PrintStream的实例化对象,而PrintStream又是OutputStream的子类,所以可以直接使用System.out直接为OutputStream实例化,这个时候的OutputStream输出的位置将变为屏幕。

范例:使用System.out为OutputStream实例化。

public class TestPrint {
    public static void main(String[] args) throws Exception {
        OutputStream out = System.out ;
        out.write("我是飞飞鱼".getBytes());
        }
    }

抽象类不同的子类针对于同一方法有不同的实现,而用户调用的时候核心参考的是抽象类。

2.系统输入

System.in对应的类型是InputStream,而这种输入流指的是由用户通过键盘进行输入(用户输入)。java本身并没有直接的用户输入处理,如果要想实现这种操作,必须使用java.io的模式来完成。

范例:利用InputStream实现数据输入

在这里插入图片描述

现在发现当用户输入数据的时候程序需要暂停执行,也就是程序进入了阻塞状态。直到用户输入完成(按下回车),程序才能继续向下执行。

以上的程序本身有一个致命的问题,核心点在于:开辟的字节数组长度固定,如果现在输入的长度超过了字节数组长度,那么只能够接收部分数据。这个时候是由于一次读取不完所造成的问题,所以此时最好的做法是引入内存操作流来进行控制,这些数据先保存在内存流中而后一次取出。

范例:引入内存流。

在这里插入图片描述
在这里插入图片描述

现在虽然实现了键盘输入数据的功能,但是整体的实现逻辑过于混乱了,即java提供的System.in并不好用,还要结合内存流来完成,复杂度很高。

如果要想在IO中进行中文的处理,最好的做法是将所有输入的数据保存在一起再处理,这样才可以保证不出现乱码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值