过滤流简介(2)

键盘录入

简单用法Scanner扫描器接收键盘录入

System.in:InputStream用于指代系统默认的输入设备---键盘

屏幕输出

System.out:PrintStream用于指代系统默认的标准输出设备---屏幕显示

System.err:PrintStream用于指代系统默认的错误输出设备---屏幕显示

注意:在程序中同时使用System.out和System.err输出时,不能保证准确的输出顺序。所以为了查看执行顺序,一般只能选择其中一个进行使用

强调
  • 一般使用缓存流的目标是在于以透明的方式引入缓冲区,以提高代码的执行效率,所以不会使用什 么特殊的方法,还是使用Reader/Writer、InputStream/OutputStream之类的父类中提供的方法

  • 特殊的是BufferedReader方法readLine 过滤流使用必须有对应的节点流,因为过滤流是用于装饰节点流的,不是有具体的操作目标

  • 执行close方法会自动关闭被装饰的对象,所以不需要再关闭FileReader、FileWriter

  • 执行flush方法会自动刷新数据到被装饰的流上,但是并没有执行关闭流。针对输出流关闭时会自动先flush然后再关闭

数据流

DataInputStream和DataOutputStream允许与机器无关的风格读写java原始类型的数据,比较适合于网络上的数据传输。经常在大学java相关课程的期末考试中见到此类编程题目

只有字节流,没有对应的字符流

构造器:DataInputStream(InputStream) DataOutputStream(OutputStream)

FileOutputStream中并没有直接写出double类型数据的方法,所以只能将数据转换为字符串进行输出

数据流针对8种简单类型提供了对应的读写方法

数据类型输入流DataInputStream输出流DataOutputStream
整数readByte、readShort、readInt、readLongwriteByte、writeShort、writeInt、writeLong
浮点数readFloat、readDoublewriteFloat、writeDouble
布尔型readBooleanwriteBoolean
字符型readCharwriteChar

数据流是通过EOFException用于判断流结束end-of-file

打印流

打印流都是用于实现打印输出,其中有PrintWriter和PrintStream,分别针对字符和字节,都提供了一 系列重载的print和println方法,可以输出多种类型数据

输出引用类型:具体实现是通过调用对象的toString()方法将对象转换为String进行输出

注意 PrintWriter和PrintStream的输出操作不会抛出异常,用户可以通过错误状态检查获取错误信息

PrintWriter和PrintStream都有自动的flush功能

特殊构造器

  • public PrintWriter (Writer out)

  • PrintWriter(Writer out,boolean autoFlush) boolean表示是否支持自动刷新

  • PrintWriter(OutputStream out) 直接使用OutputStream时不需要通过桥接处理

  • PrintWriter(OutputStream out, boolean autoFlush)

  • PrintStream(OutputStream out)

  • PrintStream(OutputStream out, boolean autoFlush)

  • PrintStream(String fileName) 参数为文件名称,表示数据直接输出到指定文件中

  • PrintStream(File file)

对象流

可以使用DataInputStream和DataOutputStream读写对象数据,但是操作繁琐

Java提供了ObjectInputStream和ObjectOutputStream可以直接读写Object对象,实际上还提供了针对 8种简单类型和String类型的读写操作方法

  • ObjectInputStream提供了读取对象的方法readObject():Object

  • ObjectOutputStream提供了写出对象的方法writeObject(Object):void

序列化

读写一个对象的前提是这个类型的对象是可序列化的

  • 对象的序列化简单的来说就是将对象可以直接转换为二进制数据流

  • 对象的反序列化将二进制数据流转换为对象

针对对象的序列化和反序列化是通过JVM实现的,编程中只做声明,序列化的目标就是将对象保存到磁盘中或者允许在网络中直接传动

如果需要使用序列化或者反序列化操作,则必须在序列化对象上添加对应的声明,否则NotSerializableException

  • 19
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值