IO流相关知识点(3)

特殊操作流

标准输入输出流

在这里插入图片描述
这两个都是system的成员变量,且都用final修饰,所以,可以直接通过system类名调用该变量

标准输入流

在这里插入图片描述
一次读取一个字符(数据来源于键盘输入),但是无法正常读取汉字
在这里插入图片描述
这里第一个括号里 是采用了转换流 将字节流转换为字符流(实际上就是前面的字符流的定义,原本字符流传入的参数就是字节流)
之后再把字符流包装成字符缓冲流(实际上就是字符缓冲流的定义)

总结 Scanner类输入

在这里插入图片描述
java系统给我们提供了Scanner类 实现键盘录入

标准输出流

在这里插入图片描述
注意,System.out.print();参数不可以为空
但是System.out.println();参数可以为空->这个可以实现换行

总结 sout输出

在这里插入图片描述

打印流

只用于输出流写数据 属于输出流的一份子

字节打印流

在这里插入图片描述
只负责输出数据,也就是向文件里写入数据,输出是指从类代码中输出到指定文件

在这里插入图片描述
可以使用构造方法创建打印流,参数传入文件路径

在这里插入图片描述
当采用继承的父类的方法(比如write)时,会自动转码为字符
当采用自己的特有的方法时,则会原样输出到指定文件

字符打印流

在这里插入图片描述

第一个构造方法

在这里插入图片描述
参数传入文件路径
对于字符流 要flush 所以需要手动flush

第二个构造方法

在这里插入图片描述
第二个构造方法 可以实现自动刷新flush
但是参数需要传入一个Writer对象 一般用FileWrieter(文件路径),再传入一个true

这样,使用自己的println方法时 可以实现三个功能:输出内容+换行+刷新

字符打印流改进复制文件

在这里插入图片描述
改进点在于:创建输出流对象,以及循环内写数据的操作,都采用打印流

对象序列化流

对象序列化

介绍

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

具体代码演示

在这里插入图片描述
在这里插入图片描述
首先要创建对象序列化输出流 传入输出流为参数

之后创建要写的对象
注意 这个对象要继承serialiazble接口 但是不用重写他的方法,这是个标志类接口
这样,才能将该对象写入文件

最后释放资源

对象反序列化

介绍

在这里插入图片描述

具体代码演示

在这里插入图片描述
注意 这里有个向下转型的操作,即 将Object向下转型为Student,从而得到Student对象,利用该对象,进行一些操作

对象序列化的两个问题

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

第一个问题

在这里插入图片描述
当使用对象序列化流写入一个文件之后 修改了类当中的内容 那么 反序列化就会发生异常
会报错(因为 一但修改了类当中的内容 那么 其生成的序列化ID会发生改变 从而会导致反序列化异常)

解决办法
在这里插入图片描述
在这里插入图片描述
对该类进行一个显式声明,手动固定他的序列化ID值 这样 就可以防止ID值发生改变 就可以实现反序列化

第二个问题

在这里插入图片描述

给目标成员变量加上一个关键字,transient 即可实现 屏蔽该成员变量参与序列化

Properties

概述以及基本代码演示

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

特有方法

在这里插入图片描述
在这里插入图片描述
第一个方法,通过这个方法 限制了添加元素时 参数的类型 本来键和值都是Object类型 现在都被限制为String类型 便于进行一些操作
在这里插入图片描述
该方法返回一个set集合 类型为String,该集合储存的是键,键也为String类型

所以,可以利用该方法,返回一个集合,再结合第二个方法,就可以实现增强for循环

Properties和IO流的结合使用

在这里插入图片描述
以下分别以第二个和第四个为例,第一个和第三个类似

将集合中的内容写入文件

在这里插入图片描述
调用方法时,要用到FileWriter流对象作为方法的参数,该流对象的构造方法指定了文件路径

在这里插入图片描述
这里用到FileReader流对象

小技巧,在main函数中写入函数调用,alt+回车 会自动在main函数外面生成函数声明
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,作为文本AI助手,我无法绘制思维导图。但是,我可以为您提供一个简要的java IO知识点总结。 Java IO是Java中用于处理输入和输出的机制。它提供了一种有效的方式来读取和写入数据,以及与文件、网络和其他设备进行交互。 Java IO包括字节和字符两种类型。字节以字节为单位进行操作,适用于处理二进制数据。而字符以字符为单位进行操作,适用于处理文本数据。 常用的字节包括InputStream和OutputStream类,用于读取和写入字节数据。常用的字符包括Reader和Writer类,用于读取和写入字符数据。可以通过使用字节和字符的组合来实现不同类型数据的读写操作。 在Java IO中,还有一些特殊的,如缓冲、转换、对象等。缓冲提供了缓冲区来提高IO性能。转换用于处理字符编码和解码。对象用于对Java对象进行读写操作。 此外,Java IO还包括一些常用的类和方法,如File类用于处理文件和目录,RandomAccessFile类用于对文件进行随机访问,FileInputStream和FileOutputStream类用于读写文件等。 通过组合和使用不同类型的和类,您可以实现各种复杂的IO操作,如读写文件、网络通信、序列化对象等。 希望这个简要总结对您有所帮助。如果您有任何更具体的问题,请随时提问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [万字长文+思维导图帮你梳理 Java IO ,还学不会你来打我(值得收藏)](https://blog.csdn.net/a1405/article/details/116766237)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值