java-IO流

来源:互联网 发布:部落冲突防空升级数据 编辑:程序博客网 时间:2024/06/09 23:20

(一)IO概念

应用程序中,常碰到的运算:CPU运算和IO运算。IO运算是应用程序的瓶颈,磁盘和网络IO操作都较慢。


(二)分类

是否阻塞:普通IO和NIO

数据单位划分:字节流和字符流

数据流方向:输入流和输出流

功能划分:节点流和处理流(处理流利用装饰者模式套接节点流,直接转换字节读取字符,如BufferedOutputStream


(三)字节流和字符流

字节流是1byte=8bit,字符流是2byte

jdk提供的四个io抽象类:字节流(InputStream和OutputSteam),字符流(Writer和Reader),更多信息参考这篇博文

磁盘和网络传输都是以字节为单位,字符只存在于JVM内存中;直接以字节传输会比较快


(四)输入流和输出流

输入流指从磁盘网络输入数据到程序,输出流指从程序输出数据到磁盘网络


(五)字符和编码

数据持久化和网络数据传输,都是以字节流进行的,所以经常需要进行字符字节相互转换。转换过程中涉及到字符编码解码问题,容易出现乱码。关于编码问题可以参考《深入分析Java中的中文编码问题》


(六)序列化和反序列化

对象需要序列化转换成二进制流才能进行持久化或传输,需要实现Serializable接口,读取时再反序列化。序列化反序列化可以参考《Java 7之基础 - 序列化与反序列化》。


(七)网络IO性能优化

(1)减少访问网络次数:设置缓存或合并请求

(2)减少网络传输数据量大小:数据压缩

(3)减少编码,直接用字节流传输

(4)合理选用普通IO还是NIO方式

0 0
原创粉丝点击