从程序运行所在内存(输入输出是相对这个来决定的)划分:
1.输入输出流其中java提供的主要是字节为单元的的inputstream和outputstream,字符为单元的reader和writer,这四个都是抽象基类,无法直接创建实例。
2.从读写单元分为字节流和字符流一个字节8位字符操作2个字节也就是18位。
3.从处理角色来讲有节点流(低级流:就是构造参数直接物理节点路径名呀这样的)和处理流(包装流:构造参数位其他节点流)
流就像那个水管,缓存就像那个竹筒,操作字符流要比字节流方便些,字节流更为强大,读取所有的二进制,字符流只能读取文本文件,用完要记得关闭,关闭会自动flush缓存区和释放资源(该资源垃圾回收不了因为不属于Java内存资源),还有就是如果字节数组长度不够读取内容有可能会中文乱码
4.转换流就是字节转换为字符流,这样方便操作,都转换成字符流了就用不着转换为字节流,所以java只提供了字节转字符的inputstreamreader和outputstreamwriter。
还有就是bufferstream这个处理流有readline()处理读取一行的文本内容比较方便经常用。
5.在介绍一个包装流是推回输入流,是可以把读取了的推回缓冲区,下次可以接着读同样和inputstream的方法差不多有读默认大小的一般是一个也有指定位置和长度的也有指定数组长度的,还可以setout(ps)ps是一个包装流,包装一个节点流,节点流是一个操作文件的,这样就更改默认不是从控制台读取了,改成从文件来操作的了。
6.在bb一哈,有个可以任意读写文件的流因为他有个seek方法可以改变隐式的指针位置,他就是RandomAccessFile,操作方法和前面的三个差不多,但是有个比较low就是指定位置之后你要插入内容的话后面的你得找个缓冲文件先存起来,不然直接写入会覆盖,等你写好了在吧缓存的追加进来达到插入的目的,是不是还不够强大我觉得应该优化下。
网友评论