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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧