Android中的volley_5_字节数组缓冲池ByteArrayPool 和使用缓冲池技术的自定义的PoolingByteArrayOutputStream

本文介绍了Android Volley框架中的字节数组缓冲池ByteArrayPool,以及如何通过PoolingByteArrayOutputStream实现高效的字节操作。通过ByteArrayPool减少byte[]的频繁创建和销毁,提升性能。PoolingByteArrayOutputStream在字节流操作时利用缓冲池,避免了自动扩大byte[]大小,优化了内存使用。在Volley的BasicNetwork响应解析中,此技术得到应用。
摘要由CSDN通过智能技术生成


demo下载:http://download.csdn.net/detail/vvzhouruifeng/8747599


在对响应的实体进行操作的时候,使用到了byte[]   ,由于volley是轻量级频次高的网络请求框架,因此会大量使用到byte[] ,这样的话会频繁创建和销毁byte[]。为了提高性能,volley定义了一个byte[]缓冲池,即ByteArrayPool 。

在ByteArrayPool 内,定义了 两个集合,分别是存储按大小顺序排列byte[]的list  和 按使用先后顺序排列byte[]的list。在volley中所需要使用到的byte[]从该缓冲池中来取,当byte[]使用完毕后再归还到该缓冲池,从而避免频繁的创建和销毁byte[]。

/**
 * 字节数组缓冲池:
 * 
 * byte[] 的回收池,用于 byte[] 的回收再利用,减少了内存的分配和回收。主要通过一个元素长度从小到大排序的ArrayList作为 byte[] 的缓存,另有一个按使用时间先后排序的ArrayList属性用于缓存满时清理元素。
 */
public class ByteArrayPool {
    /** The buffer pool, arranged by last use 按使用的先后时间顺序排序*/
    private List<byte[]> mBuffersByLastUse = new LinkedList<byte[]>();
    /** The buffer pool, arranged by buffer size 按大小顺序排序*/
    private List<byte[]> mBuffersBySize = new ArrayList<byte[]>(64);

    /** The total size of the buffers in the pool 池中所有byte[]的长度之和 */
    private int mCurrentSize = 0;

    /**
     * 池中单个byte[]的最大长度
     * The maximum aggregate size of the buffers in the pool. Old buffers are discarded to stay
     * under this limit.
     */
    private final int mSizeLimit;

    /** Compares buffers by size 比较器,用于排序,按byte[]的字节长度进行排序*/
    protected static final Comparator<byte[]> BU
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值