Java教程

Java基础 -- I/O

本文主要是介绍Java基础 -- I/O,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Java基础 -- I/O

1. I/O流

流的分类

  • 流向分类:输入流,输出流

    • 输入流:InputStream,Reader
    • 输出流:OutputStream,Writer
  • 操作单位分类:字符流,字节流

  • 角色分类:节点流,处理流(装饰器模式)

*Q:音频、图片等信息存储单位均为字节,为什么还要引入字符流?

A: 涉及到字符的传送,若只有字节流,需要通过JVM转换,这个过程耗时;不知道编码类型,容易乱码
(字节:8位;字符:16位)

2. 序列化

  • 什么是序列化,为什么要进行序列化?

    • 对象存储在磁盘上,要求是转换为字节序列
    • 对象通过网络传输,要转换成字节序列

  • 怎么实现序列化?

对象想要序列化,类必须序列化,所以要求该类:

  • 实现Serializable接口
  • 实现Externalizable接口

  • 不想序列化怎么办?

    • transient修饰变量
    • static修饰不会被序列化,因为不属于对象,属于类

3. 常见I/O模型

常见的I/O模型共有三种:

  • BIO:Block IO,同步阻塞式IO

客户端有连接请求时,服务器就要启动一个线程处理

BIO适用于连接数目标小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中。


  • NIO:java non-blocking IO,New IO,同步非阻塞IO

NIO的数据是面向缓冲区Buffer的,必须从Buffer中读取或者写入

服务器端用一个线程处理多个连接,客户端发送的连接请求会注册到多路复用器上,多路复用器轮询到连接有IO请求就进行处理。


  • AIO:Asynchronous IO / NIO2,异步非阻塞IO

4. 参考资料

https://zhuanlan.zhihu.com/p/98094713
https://www.cnblogs.com/9dragon/p/10901448.html
https://zhuanlan.zhihu.com/p/90153833
https://blog.csdn.net/qq_19782019/article/details/80422143
https://zhuanlan.zhihu.com/p/23488863
https://blog.csdn.net/luzhensmart/article/details/82230076

这篇关于Java基础 -- I/O的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!