DataInputStream
- 数据源是local或者remote文件系统
- 正在读取的流引用有限的字节数组
- data的长度/内容在读取的过程中不发生变化
- 读取的过程中,源文件仍存在
- 调用方可以指定偏移量
- 不要求读的线程安全
- PositionedReadable需要线程安全
支持的语法是有 - pos(FSDIS)
获取FSDataInputStream的位置 - data(FSDIS)
- isOpen(FSDIS)
close
close支持幂等
getPos
返回当前的位置,如果流关闭时未定义
read
- close关闭的话,读取会失败
- 没有定义read需要多长时间
read(buffer[],offset,length)
阻塞读,直到返回目标长度的内容,或者已经获取了所有数据。
seek
从指定位置查找
目前需要对象存储实现了懒seek,在真正读之前使用以前的长度,存在情况等信息。
seekToNewSource
从不同源读取,在副本数大约1时有效。
CanUnbuffer.unbuffer()
解除缓冲,套接字,文件描述符等。之后的其他IO操作需要重新获取这些资源。
- 子类除了实现CanUnbuffer之外,需要实现StreamCapability接口。
- 可以对正在读取的文件执行该操作,但是结果没有定义。
PositionedReadable(Pread)
这里面我是不是可以理解,一个FSDIS对应一个Position,读取需要线程安全?每次读取之后,需要seek(0)?
相当于seekable.find之后再进行read,但是只有一个方法调用。
接口声明PositionedReadable是线程安全的。
PositionReadable.read(postion,buffer,offset,length)
将尽可能多的数据读入分配给它的缓冲区空间。
还有一部分类似的,这里不翻译了。
一致性
FSDIS的所有读取器,打开时接收到FS.Files[p]的数据访问
如果读取过程更改了基础数据,不一定可见.