Android 学习笔记(8)之JavaIO原理

关键点  修饰模式 (Context也是装饰模式)
装饰模式原理
1,组件对象接口 Component
2,Decorator 所有装饰器的抽象父类  内部持有Component对象
3,ConcreteComponent具体的装饰器对象。

对象下面的 
InputStream 就是组件对象接口  里面定义read()
FilterInputStream 装饰器的抽象父类  持有InputStream 对象  重写read()加功能
BufferedInputStream 等就是具体的装饰器对象。 具体实现read()

输入流和输出流
字节流  图片 RAR EXE都是用字节流读写
字符流  文本文件,xml等
5个类一个接口
File/OutputStream /InputStream /Writer /Reader
Serializable
1,流式部分  上面  OutputStream /InputStream /Writer /Reader

2,非流式部分  File  RandomAccessFile(断点续传) FileDescriptor(/)等
断点续传原理   请求下载 需要送文件已经下载的地方 也就是断点的地方

3,其他部分  权限和安全等系统类 如FileSystem

装饰模式
DataOutputStream out = new DataOutputStream(
new BufferedOutputStream(
new FileOutputStream(file)));

字节流  学习曲线 OutputStream(抽象)->FileOutputStream/FilterOutputStream -> DataOutputStream ->bufferedOutputStream
对应InputStream

FileOutputStream/FilterOutputStream  最基本类为所有装饰类提供基准

BufferedOutputStream 本地缓存了buf[]  减少对磁盘访问次数,提升性能

FilterOutputStream此类没有具体作用,只是装饰模式的封装

字符流的学习  
 Writer- >FilterWriter->BufferedWriter->OutputStreamWriter->FileWriter->其他
reader 和 Stream最大的区别我认为是它包含了一个readline()接口

BufferedWriter/BufferedReader 缓存减少对磁盘访问次数,提升性能

OutputStreamWriter/InputStreamReader 输入字符转换字节流桥梁(转换类)

 FileReader  文件字符输入流
 FileWriter 文件字符输出流

两者区别。
字节流操作时不使用缓存区   即使不关闭资源close 也能输出文件
字符流操作会使用缓存区的  不关闭资源,不会输出内容。可以使用flush 强制刷新缓存区

使用场景
一般都是使用字节流  图片等都是字节。

RandomAccessFile (分段下载,断点续传) 可读可写类
构造RandomAccessFile raf = newRandomAccessFile(File file, String mode);
mode  r/w/rw
seek(int index);可以将指针移动到某个位置开始读写;
setLength(long len);给写入文件预留空间:
write/read等方法

上一篇:SpringBoot 获取上传文件真实格式


下一篇:网络编程