Connor学Java - Day09

在这里插入图片描述

Learn && Live

虚度年华浮萍于世,勤学善思至死不渝

前言

Hey,欢迎阅读Connor学Java系列,这个系列记录了我的Java基础知识学习、复盘过程,欢迎各位大佬阅读斧正!原创不易,转载请注明出处:http://t.csdn.cn/z0svm,话不多说我们马上开始!

1.Java IO分类?

在这里插入图片描述

2.Java IO类型图?

在这里插入图片描述
字节流介绍

InputStream:abstract,为所有实现子类定义了处理输入流的方法

FileInputStream:文件输入流,用于对文件进行读取操作

PipedInputStream:管道字节输入流,能实现多线程间的管道通信

ByteArrayInputStream:字节数组输入流,将资源文件都以字节的形式存入字节数组中

FilterInputStream:装饰者类,具体的装饰者类继承该类,作用是对节点类进行封装,实现一些特殊功能

BufferedInputStream:缓冲流,内部有一个缓存区,用来存放字节,每次都是将缓存区存满然后发送,而不是逐个字节发送,效率更高

DataInputStream:数据输入流,用来装饰其他流,允许应用程序以机器无关方式从底层输入流中读取基本Java数据类型

ObjectInputStream:对象输入流,直接传输对象,通常应用在反序列化中

OutputStream与InputStream类似,方向相反

字节流方法

字节输入流InputStream主要方法:

(1)read() :从此输入流中读取一个数据字节。

(2)read(byte[] b) :从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。

(3)read(byte[] b, int off, int len) :从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。

(4)close():关闭此输入流并释放与该流关联的所有系统资源。

字节输出流OutputStream主要方法:

(1)write(byte[] b) :将 b.length 个字节从指定 byte 数组写入此文件输出流中。

(2)write(byte[] b, int off, int len) :将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。

(3)write(int b) :将指定字节写入此文件输出流。

(4)close() :关闭此输入流并释放与该流关联的所有系统资源。

在这里插入图片描述
字符流介绍

FileReader:用于读取字符文件的便利类,new FileReader(File file)等同于new InputStreamReader(new FileInputStream(file, true),“UTF-8”),但FileReader不能指定字符编码和默认字节缓冲区大小。

PipedReader :管道字符输入流。实现多线程间的管道通信。

CharArrayReader:从Char数组中读取数据的介质流。

InputStreamReader:从字节流到字符流的桥梁(InputStreamReader构造器入参是FileInputStream的实例对象),它读取字节并使用指定的字符集将其解码为字符。它使用的字符集可以通过名称指定,也可以显式给定,或者可以接受平台的默认字符集。

BufferedReader:从字符输入流中读取文本,设置一个缓冲区来提高效率。BufferedReader是对InputStreamReader的封装,前者构造器的入参就是后者的一个实例对象。

Writer与Reader类似,方向相反

字符流方法

字符输入流Reader主要方法:

(1)read():读取单个字符。

(2)read(char[] cbuf) :将字符读入数组。

(3)read(char[] cbuf, int off, int len) : 将字符读入数组的某一部分。

(4)read(CharBuffer target) :试图将字符读入指定的字符缓冲区。

(5)flush() :刷新该流的缓冲。

(6)close() :关闭此流,但要先刷新它。

字符输出流Writer主要方法:

(1)write(char[] cbuf) :写入字符数组。

(2)write(char[] cbuf, int off, int len) :写入字符数组的某一部分。

(3)write(int c) :写入单个字符。

(4)write(String str) :写入字符串。

(5)write(String str, int off, int len) :写入字符串的某一部分。

(6)flush() :刷新该流的缓冲。

(7)close() :关闭此流,但要先刷新它。

(8)BufferedWriter类newLine() :写入一个行分隔符。这个方法会自动适配所在系统的行分隔符。

​ BufferedReader类readLine() :读取一个文本行。

3.字节流和字符流有什么区别?

字节流:按8位传输,以字节为单位输入输出数据

字符流:按16位传输,以字符为单位输入输出数据

4.介绍一下File类?

public class File extends Object implements Serializable, Comparable<File>

File实现了Serializable和Comparable接口,可序列化可排序,用于处理文件,而非文件中的数据

File类的构造器

在这里插入图片描述
File类常用方法

在这里插入图片描述

5.BIO、NIO、AIO有什么区别?

BIO

同步阻塞,数据的读取写入必须阻塞在一个线程中等待其完成,并发执行能力低

NIO

(1)Non-blocking / New IO,同步非阻塞

(2)提供了Channel、Selector、Buffer等抽象,支持面向缓冲的,基于通道的I/O操作方式

(3)NIO提供了与传统BIO模型中的Socket和ServerSocket相对应的SocketChannel和ServerSocketChannel两种不同的套接字通道实现,两种通道都支持阻塞和非阻塞两种模式。阻塞模式与BIO一样,可用于低负载、低并发的应用程序;非阻塞模式与之相反,可用于高负载、高并发的应用程序

AIO

(1)Asynchronous IO,也叫NIO2,异步非阻塞

(2)基于事件和回调机制,应用操作之后直接返回,当后台处理完成,操作系统会通知相应的线程进行后续的操作

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ConnorYan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值