Snappy-Java Source Code

Snappy-Java is a Java port of the "snappy", a fast C++ compresser/decompresser developed by Google.

Snappy-Java Source Code files are provided in the source packge (snappy-java-1.1.8.4-sources.jar). You can download it at Snappy Maven Website.

You can also browse Snappy-Java Source Code below:

✍: FYIcenter.com

org/xerial/snappy/buffer/CachedBufferAllocator.java

package org.xerial.snappy.buffer;

import java.lang.ref.SoftReference;
import java.util.*;

/**
 * Cached buffer
 */
public class CachedBufferAllocator
        implements BufferAllocator
{
    private static BufferAllocatorFactory factory = new BufferAllocatorFactory()
    {
        @Override
        public BufferAllocator getBufferAllocator(int bufferSize)
        {
            return CachedBufferAllocator.getAllocator(bufferSize);
        }
    };

    public static void setBufferAllocatorFactory(BufferAllocatorFactory factory)
    {
        assert (factory != null);
        CachedBufferAllocator.factory = factory;
    }

    public static BufferAllocatorFactory getBufferAllocatorFactory()
    {
        return factory;
    }

    /**
     * Use SoftReference so that having this queueTable does not prevent the GC of CachedBufferAllocator instances
     */
    private static final Map<Integer, SoftReference<CachedBufferAllocator>> queueTable = new HashMap<Integer, SoftReference<CachedBufferAllocator>>();

    private final int bufferSize;
    private final Deque<byte[]> bufferQueue;

    public CachedBufferAllocator(int bufferSize)
    {
        this.bufferSize = bufferSize;
        this.bufferQueue = new ArrayDeque<byte[]>();
    }

    public static synchronized CachedBufferAllocator getAllocator(int bufferSize)
    {
        CachedBufferAllocator result = null;

        if (queueTable.containsKey(bufferSize)) {
            result = queueTable.get(bufferSize).get();
        }
        if (result == null) {
            result = new CachedBufferAllocator(bufferSize);
            queueTable.put(bufferSize, new SoftReference<CachedBufferAllocator>(result));
        }
        return result;
    }

    @Override
    public byte[] allocate(int size)
    {
        synchronized (this) {
            if (bufferQueue.isEmpty()) {
                return new byte[size];
            }
            else {
                return bufferQueue.pollFirst();
            }
        }
    }

    @Override
    public void release(byte[] buffer)
    {
        synchronized (this) {
            bufferQueue.addLast(buffer);
        }
    }
}

org/xerial/snappy/buffer/CachedBufferAllocator.java

 

Or download all of them as a single archive file:

File name: snappy-java-1.1.8.4-sources.jar
File size: 1962098 bytes
Release date: 2021-01-25
Download 

 

Download and Install Snappy-Java Binary Package

What Is Snappy-Java

Downloading and Reviewing snappy-java.jar

⇑⇑ Snappy-Java - Compresser and Decompresser

2021-07-13, 15304👍, 0💬