Download - Hadoop compress-stream
readBlock
(压缩块在文件中的偏移量,
硬盘上的压缩块大小,
解压后数据的大小[一般在块压缩文件中会
记住这个大小])
compressAlgo.getDecompressor()
根据用户选择的压缩算法获得一个
Decomprssor[可能是从CodecPool中得到或
new出来]
根据前面设置的文件中的块 new
BoundedRangeFileInputStream
用来读取文件中的其中一块压缩数据
compressAlgo.
createDecompressionStream()
获得解压流
在这个流上读数据
读到的数据就是解压过的
读一块数据的基本流程
关闭该解压流
一个解压流的对象关系 (以LZO为例)
BufferedInputStream
(缓存Buffer是1KB)
BlockDecompressorStream
(解压buffer为64KB,
对应一个Decompressor)
BoundedRangeFileInputStream
(对应底层流中的一段数据start-end)
可在同一个底层流上有多个,close
时不会close底层流
FSDataInputStream
(对应到HDFS上的文件)
FilterInputStream
DecompressorStream CompressionInputStream
DataInputStream
Seekable, PositionedReadable
包含底层流
包含底层流
包含底层流
Start writeBlock
compressAlgo.getCompressor()
根据用户选择的压缩算法获得一个
Comprssor[可能是从CodecPool中得到或new
出来]
compressAlgo.
createCompressionStream()
获得压缩流
new DataOutputStream
用于写的直接接口
写各种各样的数据到这个流
写一块数据的基本流程
在一个块写完的时候flush该流,但不必
close。因为close就会将底层的流都close
掉,也就close了底层文件,我们必须在写
完所有的block后再单独close底层文件流
一个压缩流的对象关系 (以LZO为例)
DataOutputStream
(最上层,为了能写各种类型的数据)
BufferedOutputStream
(写缓存Buffer 4KB)
FinishOnFlushCompressionStream
在flush的时候先调用底层压缩流的
finish,然后flush,并reset底层流
的resetStarte
BlockCompressorStream
压缩buffer 64KB
FilterInputStream
DataOutput
FilterOutputStream
CompressorStream
包含底层流
包含底层流
包含底层流
FilterOutputStream
CompressionOutputStream
FSDataOutputStream
底层的文件流
包含底层流
DataOutputStream
Syncable