IO知识点整理

本文内容均为复制粘贴,所有链接均已贴出
原文1链接: link.
原文2链接: link.

1、IO流的本质是数据传输,根据数据传输特性将流抽象为各个类,方便更直观的进行数据操作。IO流的目的是为数据源和目的地建立一个输送通道。
2、IO流的分类
按流向可分为输入流和输出流
按操作单元可分为字节流和字符流
按功能可分为节点流和处理流
节点流:向一个特定的地方读写数据,如FileInputStream
处理流:对一个已经存在的流进行封装,如BufferReader
3、流的超类
InputStream , OutputStream , Reader , Writer

4、Java流有着另一个重要的用途,那就是利用对象流对对象进行序列化。在一个程序运行的时候,其中的变量数据是保存在内存中的,一旦程序结束这些数据将不会被保存,一种解决的办法是将数据写入文件,而Java中提供了一种机制,它可以将程序中的对象写入文件,之后再从文件中把对象读出来重新建立。这就是所谓的对象序列化。
这一段原文链接 :link.
序列化是一种用来处理对象流的机制,将对象内容进行流化,可以对流化后的对象进行读写操作,并且可以将流化后的对象传输于网络之间。
当一个类的某些属性不需要被序列化时使用transient关键字

5、字节流和字符流的区别?
原文摘自: link
字节流在操作时不会使用到缓冲区,是文件直接进行操作的,而字符流会用到缓冲区,可以使用强制关闭和flush()将缓冲区的内容刷新出来。
缓冲区可以理解为一个特殊的内存区域,某些情况下程序会反复对一个文件进行操作,为了提升性能,可以将一部分数据放到内存的一块区域中,这样可以直接从这块内存中读取相应数据,读取速度会比较快。
在字符流的操作中,所有的字符都是在内存中形成的,在输出前会将所有内容放到内存中,所以使用到了缓冲区暂存数据。

字节流和字符流最主要的区别是它们的处理方式。
所有的文件在硬盘或在传输时都是以字节的形式进行的,包括图片都是以字节的形式进行保存的,字符只是在内存中形成的。
字节流是最基本的,是按照字节的方式进行处理,字符流按照虚拟机的encode进行处理,这两个是通过InputStreamReader和OutputStreamWriter进行关联。
1.字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串;
2. 字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以

6、I/O模型
原文1参考: link
原文2参考: link
原文3参考: link

1、阻塞I/O
服务器实现模式是一个连接一个线程,每当客户端有连接请求的时候服务器总会开启一个线程进行处理,如果这个连接不作任何事情,就会造成不必要的线程开销。
2、非阻塞I/O
3、I/O复用
4、信号驱动I/O
5、异步I/O

7、Filter流
原文摘自: link

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值