java IO流、同步异步、阻塞非阻塞、IO模型、Path、File简单汇总

一、流相关内容

1.字节流
InputStream
OutputStream

特殊的文件字节流
FileInputStream
FileOutputStream

2.字符流:
Reader
Writer

特殊的文件字符流(执行字符和字节转换时,特殊的文件字节流被使用)
FileReader
FileWriter

3.普通的字节流与字符流转换,用于创建字符流:
InputStreamReader
OutputStreamWriter
除了文件的,其他都用上述两个普通的转换类来实现字节和字符的转换。
4.
1.BufferedInputStream and BufferedOutputStream
2.BufferedReader and BufferedWriter
用于对文件字节流和字符流装饰,需手动刷新,缓存本来就是提高性能的方式,
同时提供了行读写方式。

5.对于原始数据类型的读写,可以使用专门的流,如下:
DataInputStream and DataOutputStream.
其分别是 DataInput or DataOutput的实现。
使用时作为BufferedReader and BufferedWriter的装饰实现,或者更往上层,
根据具体的构造来处理。

6.对于实现了序列化的对象而言:
ObjectInputStream and ObjectOutputStream 来处理对象流
主要方法:writeObject and readObject
他们分别实现 ObjectInput and ObjectOutput接口,这两个接口是DataInput and DataOutput.的子接口。

二、同步和异步、阻塞和非阻塞、Linux IO简述(参照其他人的)

阻塞和非阻塞指调用方:指调用方的行为,指调用方想要处理某件事,是是否等待处理完成,等就是阻塞,不等就是不阻赛。
同步和异步:指被调用方的行为,指处理完调用方需要处理的某件事后,是主动回调调用方(一般都是回调函数),还是等待调用方自己主动回调,调用方自己主动回调,则是同步,主动回调调用方就是异步。
四种组合按照上述意思理解即可。

IO模型:
阻塞型:例如socket调用等待返回后才开始读取,不立即得到数据。
非阻塞型:会立即得结果,但是不一定是想要得,所以会不断重复询问。
IO复用模型:多路复用IO模型是目前使用得比较多的模型。Java NIO实际上就是多路复用IO。
在Java NIO中,是通过selector.select()去查询每个通道是否有到达事件,如果没有事件,则一直阻塞在那里,因此这种方式会导致用户线程的阻塞。
多路复用,说白了,就是一个通道要尽可能的利用起来,使用selector或者poll方式
是将原本单独执行的请求,封装后一块往里送,增加包的容量,这样避免很多问题,cpu的利用率得到更大的利用。
信号驱动IO模型:在信号驱动IO模型中,当用户线程发起一个IO请求操作,会给对应的socket注册一个信号函数,
用户线程会继续执行,当内核数据就绪时会发送一个信号给用户线程,
用户线程接收到信号之后,便在信号函数中调用IO读写操作来进行实际的IO请求操作。
异步IO模型:

BIO:
Java BIO即Block I/O , 同步并阻塞的IO。
BIO就是传统的java.io包下面的代码实现。

NIO:
NIO 与原来的 I/O 有同样的作用和目的, 他们之间最重要的区别是数据打包和传输的方式。原来的 I/O 以流的方式处理数据,
而 NIO 以块的方式处理数据。
面向流 的 I/O 系统一次一个字节地处理数据。一个输入流产生一个字节的数据,一个输出流消费一个字节的数据。
为流式数据创建过滤器非常容易。链接几个过滤器,
以便每个过滤器只负责单个复杂处理机制的一部分,这样也是相对简单的。不利的一面是,面向流的 I/O 通常相当慢。
一个 面向块 的 I/O 系统以块的形式处理数据。
每一个操作都在一步中产生或者消费一个数据块。按块处理数据比按(流式的)字节处理数据要快得多。
但是面向块的 I/O 缺少一些面向流的 I/O 所具有的优雅性和简单性。

AIO
Java AIO即Async非阻塞,是异步非阻塞的IO.

三、Path 和 File

基本都是增删改查,判断是否存在,特别是
path是完整路径(包含目录和文件)
两个都有对应的工具类:
Paths和Files.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值